Android Academy · Oppitunti

Turvalliset kutsut ja Elvis-operaattori

?.- ja ?:-operaattorit.

Oppitunti 2/413 vaihetta

Turvalliset kutsut ja Elvis-operaattori on ilmainen Android Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Android Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Android Academy-kurssilla on yhteensä 4 oppituntia.

if-tarkistuksia pidemmälle

Jokaisen nullable-arvon tarkistaminen if-ehdolla toimii, mutta koodista tulee nopeasti sanallista. Kotlin tarjoaa null-arvojen käsittelyyn suunniteltuja tiiviitä operaattoreita.

Tässä oppitunnissa käsitellään turvallisen kutsun operaattoria ?. ja Elvis-operaattoria ?:, joita tulette käyttämään jatkuvasti.

Turvallisen kutsun operaattori

?.-operaattori kutsuu metodia vain, jos arvo ei ole null. Jos arvo on null, koko lauseke saa arvokseen null eikä aiheuta kaatumista.

Se on turvallinen lyhennys if-not-null-kuviolle.

fun main() {
    val name: String? = "Coddy"
    println(name?.length)
}

Turvallinen kutsu null-arvolle

Kun vastaanottaja on null, turvallinen kutsu oikaisee ja palauttaa null-arvon. Poikkeusta ei heitetä.

Tässä tulostettava tulos on sana null, ei kaatuminen.

fun main() {
    val name: String? = null
    println(name?.length)  // prints: null
}

Turvallisten kutsujen ketjuttaminen

Voitte ketjuttaa ?.-operaattoreita useiden vaiheiden yli. Jos jokin ketjun osa on null, koko ketju pysähtyy ja palauttaa null-arvon.

Tämä sopii erinomaisesti sisäkkäisten valinnaisten tietojen käsittelyyn.

class Address(val city: String?)
class User(val address: Address?)

fun cityOf(u: User?): String? {
    return u?.address?.city
}

Elvis-operaattori

Elvis-operaattori ?: antaa varaarvon, kun vasen puoli on null. Se on nimetty laulajan hiustyylin mukaan, jota symboli muistuttaa.

Lukekaa se näin: käyttäkää vasenta arvoa tai muussa tapauksessa oikeaa arvoa.

fun main() {
    val name: String? = null
    val shown = name ?: "Guest"
    println(shown)  // prints: Guest
}

Elvis ja turvalliset kutsut

Turvallinen kutsu ja Elvis toimivat erinomaisesti yhdessä. Käyttäkää ?.-operaattoria arvon käsittelyyn ja ?:-operaattoria oletusarvon antamiseen, jos jokin arvo oli null.

Tämä kuvio muuttaa nullable-tuloksen varmasti ei-null-arvoksi.

fun main() {
    val name: String? = null
    val len: Int = name?.length ?: 0
    println(len)  // prints: 0
}

Esimerkki oletuspituudesta

Tässä tuloksen tyyppi on tavallinen Int, ei Int?. Elvis-operaattori poisti null-kelpoisuuden.

Kun ?:-operaattorin jälkeen käytetään ei-null-varaarvoa, kääntäjä tietää, ettei arvo voi koskaan olla null.

val title: String? = "Kotlin"
val length: Int = title?.length ?: 0
// length is a non-null Int

Elvis aikaisessa paluussa

Koska return ja throw ovat Kotlinissa lausekkeita, voitte sijoittaa ne Elvis-operaattorin oikealle puolelle.

Tämä on selkeä tapa poistua aikaisin, kun vaadittu arvo puuttuu.

fun process(input: String?) {
    val text = input ?: return
    println(text.uppercase())
}

Turvallinen kutsu ja let

Yhdistäkää ?. ja let, kun haluatte suorittaa lohkon vain, jos arvo ei ole null. Lohkon sisällä arvo on ei-null ja siihen viitataan nimellä it.

Tämä on yleinen tapa käsitellä valinnaisia arvoja.

fun main() {
    val email: String? = "a@b.com"
    email?.let {
        println("Sending to " + it)
    }
}

Kaiken yhdistäminen

Lyhyt ohjelma voi näyttää, miten turvallinen kutsu ja Elvis toimivat yhdessä ystävällisen viestin tuottamiseksi.

Huomatkaa, ettei if-lausetta tarvita, mutta koodi ei silti ole vaarassa kaatua null-arvon vuoksi.

fun main() {
    val nickname: String? = null
    val display = nickname?.uppercase() ?: "ANONYMOUS"
    println(display)
}

Milloin mitäkin käytetään

Käyttäkää ?.-operaattoria, kun haluatte null-tuloksen kulkevan harmittomasti eteenpäin. Käyttäkää ?:-operaattoria, kun haluatte korvata null-arvon konkreettisella oletusarvolla.

Yhdessä ne kattavat valtaosan jokapäiväisestä null-arvojen käsittelystä ilman pitkiä tarkistuksia.

val count = list?.size ?: 0
// safe call reads size, Elvis defaults to 0

Pikatarkistus

Testatkaa, miten hyvin hallitsette turvalliset kutsut ja Elvis-operaattorin.

Kertaus

Turvallinen kutsu ?. kutsuu jäsentä vain, jos vastaanottaja ei ole null; muussa tapauksessa tuloksena on null. Elvis-operaattori ?: korvaa null-arvon varaarvolla.

Niiden ketjuttaminen poistaa null-kelpoisuuden siististi. Seuraavaksi tutustutte tarkemmin näkyvyysaluetoimintoihin, kuten let- ja also-funktioihin.

Aloita maksutta

Opi Kotlin tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
36
Oppitunnit
152

Usein kysytyt kysymykset

Onko oppitunti ”Turvalliset kutsut ja Elvis-operaattori” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Android Academy-oppimispolun 3 oppituntia, myös oppitunnin “Turvalliset kutsut ja Elvis-operaattori”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Android Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Turvalliset kutsut ja Elvis-operaattori”?

?.- ja ?:-operaattorit. Harjoittelet Android Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Android Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Android Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Turvalliset kutsut ja Elvis-operaattori”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Android Academy-oppitunnilla?

Kyllä. Jokainen Android Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Nullable- ja non-null-tyypit
  2. Turvalliset kutsut ja Elvis-operaattori
  3. let, also ja scope-funktiot
  4. NullPointerException-virheiden välttäminen
← Takaisin: Android Academy