Kotlin Academy · Oppitunti

Nullable-tyypit ja ?-muunnin

Määrittäkää nullable-muuttujia ja ymmärtäkää Kotlinin käännönaikainen null-turvallisuus.

Oppitunti 1/413 vaihetta

Nullable-tyypit ja ?-muunnin on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/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 Kotlin Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.

Null-turvallisuus Kotlinissa

Kotlin erottaa käännösaikana toisistaan tyypit, joihin voi sisältyä null, ja tyypit, joihin sitä ei voi sisältyä. Kääntäjä estää useimmat NullPointerException-poikkeukset jo ennen suoritusta.

Ei-null-tyyppi

Kotlin-tyyppi ei oletusarvoisesti voi olla null. Jos yritätte määrittää sille null-arvon, kääntäjä kieltäytyy.

fun main() {
    val name: String = "Ada"
    // val nope: String = null // ERROR
    println(name)
}

Nullable-tyyppi kysymysmerkillä ?

Lisätkää perään ?, jos haluatte sallia null-arvon. Kääntäjä käsittelee muuttujaa nyt mahdollisesti puuttuvana.

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

Metodien kutsuminen nullable-arvoilla

Nullable-arvolle ei voi kutsua metodia suoraan ennen null-tapauksen käsittelyä. Kääntäjä kieltäytyy.

fun main() {
    val name: String? = "Bob"
    // println(name.length) // ERROR — name might be null
    if (name != null) println(name.length) // smart cast
}

Smart castit

if (x != null) -tarkistuksen jälkeen Kotlin tekee x-muuttujalle smart castin ei-null-tyypiksi haaran sisällä.

fun main() {
    val name: String? = "Alice"
    if (name != null) {
        println("Length: ${name.length}") // safe, smart-cast
    } else {
        println("No name")
    }
}

Nullable-funktioparametri

Merkitkää funktioparametrit nullable-tyyppisiksi, kun arvo saattaa puuttua. Kutsujan on annettava eksplisiittisesti joko arvo tai null.

fun greet(name: String?) {
    if (name == null) println("Hello, stranger")
    else println("Hello, $name")
}
fun main() {
    greet("Sara")
    greet(null)
}

Nullable-paluuarvon tyyppi

Funktio, jonka paluuarvon tyyppi on X?, kertoo kutsujalle, että se saattaa palauttaa null-arvon — kutsujan on käsiteltävä tämä.

fun findUser(id: Int): String? {
    return if (id == 1) "Alice" else null
}
fun main() {
    val u = findUser(2)
    println(u ?: "no user")
}

Nullable-ominaisuudet

Myös luokan ominaisuudet voivat olla nullable-tyyppisiä. Tämä on tavallista, kun kentät täytetään myöhemmin tai haetaan valinnaisesti.

data class Profile(
    val name: String,
    val avatarUrl: String?
)
fun main() {
    val p = Profile("Lee", null)
    println(p.avatarUrl ?: "(no avatar)")
}

Vertailu Javaan

Kotlin-koodiin siirtyvät Java-tyypit näkyvät platform types -tyyppeinä (String!). Kotlin luottaa tällöin ohjelmoijaan, mutta ei tarjoa null-turvallisuutta. Merkitkää Java-rajapinnat aina mahdollisuuksien mukaan annotaatioilla @Nullable/@NotNull.

fun main() {
    val maybeList: List<Int>? = null
    val listOfMaybe: List<Int?> = listOf(1, null, 3)
    println(maybeList?.size)     // null
    println(listOfMaybe.size)    // 3
}

Miksi tällä on merkitystä

Käännösaikainen null-turvallisuus estää kokonaisen luokan ajonaikaisia kaatumisia. Hyödyntäkää ?-muunninta: se dokumentoi tarkoituksen ja pakottaa käsittelemään tilanteen.

fun main() {
    val maybeNull: String? = System.getenv("FOO") // null if unset
    println("env FOO = ${maybeNull ?: "(unset)"}")
}

Miksi sillä on merkitystä

Käännösaikainen null-turvallisuus estää kokonaisen luokan ajonaikaisia kaatumisia. Ottakaa ?-muokkain käyttöön — se ilmaisee tarkoituksen ja pakottaa käsittelemään tilanteen.

fun divide(a: Int, b: Int): Int? = if (b == 0) null else a / b
fun main() {
    val r1 = divide(10, 2) // 5
    val r2 = divide(10, 0) // null — handled at call site
    println("$r1, $r2")
}

Pikakoe

Mitä tyypin määrityksen lopussa oleva ? tarkoittaa?

Kertaus

Kotlin-tyypit ovat oletusarvoisesti ei-nullable-tyyppejä. Lisäämällä ?-merkin voitte sallia null-arvon. Kääntäjä valvoo null-arvojen käsittelyä smart castien, turvallisten kutsujen ja Elvis-operaattorin avulla, mikä estää useimmat NullPointerException-poikkeukset jo ennen suoritusta.

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
51
Oppitunnit
203

Usein kysytyt kysymykset

Onko oppitunti ”Nullable-tyypit ja ?-muunnin” ilmainen?

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

Mitä opin oppitunnilla ”Nullable-tyypit ja ?-muunnin”?

Määrittäkää nullable-muuttujia ja ymmärtäkää Kotlinin käännönaikainen null-turvallisuus. Harjoittelet Kotlin Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Kotlin Academy-opiskelun?

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

Kuinka kauan ”Nullable-tyypit ja ?-muunnin”-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ä Kotlin Academy-oppitunnilla?

Kyllä. Jokainen Kotlin 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-tyypit ja ?-muunnin
  2. Turvallinen kutsu ?. ja Elvis ?: käytännön koodissa
  3. let, also ja run nullable-vastaanottimilla
  4. !!-operaattori: milloin ja miksi sitä kannattaa välttää
← Takaisin: Kotlin Academy