Nullable-tyypit ja ?-muunnin
Määrittäkää nullable-muuttujia ja ymmärtäkää Kotlinin käännönaikainen null-turvallisuus.
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.
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
- Nullable-tyypit ja ?-muunnin
- Turvallinen kutsu ?. ja Elvis ?: käytännön koodissa
- let, also ja run nullable-vastaanottimilla
- !!-operaattori: milloin ja miksi sitä kannattaa välttää