Nullable- ja non-null-tyypit
?-tyyppimerkintä.
Nullable- ja non-null-tyypit on ilmainen Android 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 Android Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Android Academy-kurssilla on yhteensä 4 oppituntia.
Miksi null-turvallisuus on tärkeää
Monet Android-sovellusten kaatumiset johtuvat yhdestä virheestä: käytetään arvoa, joka todellisuudessa puuttuu. Muissa kielissä tästä seuraa suorituksen aikana pelätty NullPointerException.
Kotlin käsittelee asian käännösaikana. Tyyppijärjestelmä seuraa, mitkä arvot voivat olla null-arvoja ja mitkä eivät koskaan voi olla niitä. Tässä oppitunnissa esitellään tämän järjestelmän perusteet.
Ei-null-tyypit
Kotlinin tyyppi ei oletusarvoisesti voi sisältää null-arvoa. String viittaa aina oikeaan merkkijonoon.
Jos yritätte sijoittaa siihen null-arvon, koodi ei edes käänny. Tämä on turvallinen oletus.
fun main() {
val name: String = "Ada"
println(name.length)
}Null-arvo hylätään
Seuratkaa, mitä tapahtuu, kun yritätte sijoittaa null-arvon ei-null-tyyppiin.
Kääntäjä estää tämän heti. Piilevästä virheestä ei voi seurata ongelmaa suorituksen aikana.
val name: String = null // Compile error:
// Null can not be a value of a non-null type StringNullable-tyypit merkillä ?
Joskus arvo voi todella puuttua, kuten käyttäjän valinnainen toinen etunimi. Ilmoittakaa tämä lisäämällä tyypin perään ?.
String? voi sisältää oikean merkkijonon tai null-arvon. Kysymysmerkki merkitsee tyypin nullable-tyypiksi.
fun main() {
val middleName: String? = null
println(middleName)
}Kaksi eri tyyppiä
String ja String? eivät ole sama tyyppi. Jälkimmäinen on laajempi tyyppi, joka sisältää myös arvon null.
Tämän eron ansiosta kääntäjä voi suojata teitä. Se tietää tarkasti, missä null voi esiintyä.
val sure: String = "hello"
val maybe: String? = "hello"
// maybe could later be null; sure never canNullable-tyyppiä ei voi käyttää suoraan
Kääntäjä ei anna kutsua metodia nullable-arvolla ennen kuin se on tarkistettu.
Koska middleName voi olla null, .length-kutsu aiheuttaa käännösvirheen. Null-tapaus on käsiteltävä.
val middleName: String? = null
println(middleName.length)
// Error: only safe (?.) or non-null (!!) calls allowedTarkistaminen if-ehdolla
Yksinkertaisin tapa käyttää nullable-arvoa on tarkistaa se if-ehdolla.
Haarassa, jossa olette osoittaneet arvon olevan ei-null, Kotlin muuntaa sen älykkäästi ei-null-tyypiksi, joten .length toimii.
fun main() {
val text: String? = "Kotlin"
if (text != null) {
println(text.length)
}
}Älykkäät tyyppimuunnokset
Onnistuneen null-tarkistuksen jälkeen kääntäjä muistaa loppulohkon ajan, ettei arvo ole null. Tätä kutsutaan älykkääksi tyyppimuunnokseksi.
Teidän ei tarvitse kirjoittaa muunnosta itse. Kotlin seuraa asiaa automaattisesti puolestanne.
fun describe(s: String?) {
if (s == null) return
// s is now treated as String here
println("Length is " + s.length)
}Funktioiden parametrit
Se, voiko parametri olla nullable, kuuluu funktion sopimukseen. Ei-null-parametri lupaa kutsujille, ettei se koskaan vastaanota null-arvoa.
Nullable-parametri ilmaisee, että puuttuva syöte on odotettu ja käsitellään.
fun greet(name: String) {
println("Hi, " + name)
}
// greet(null) would not compilePalautustyypit voivat olla nullable
Funktio voi palauttaa null-arvon ilmoittaakseen, ettei mitään löytynyt. Merkitkää sen palautustyyppi ?-merkillä.
Tällöin kutsujat tietävät, että tulos on tarkistettava ennen sen käyttämistä.
fun firstChar(s: String): Char? {
if (s.isEmpty()) return null
return s[0]
}Käyttäkää oletuksena ei-null-tyyppejä
Hyvä sääntö on suosia ei-null-tyyppejä. Lisätkää ? vain, kun arvo voi aidosti puuttua.
Näin koodinne pysyy totuudenmukaisena. Mitä vähemmän nullable-tyyppejä käytätte, sitä vähemmän null-tarkistuksia tarvitsette myöhemmin.
// Prefer this:
val score: Int = 0
// Over this, unless null is meaningful:
val maybeScore: Int? = nullPikatarkistus
Testatkaa, miten hyvin ymmärrätte nullable- ja ei-null-tyyppien eron.
Kertaus
Kotlinin tyypit ovat oletusarvoisesti ei-null-tyyppejä, ja null hylätään käännösaikana. Lisätkää tyyppiin ?, kun arvo voi puuttua.
Nullable-arvoa ei voi käyttää suoraan. Null-tarkistus muuntaa sen älykkäästi ei-null-tyypiksi, jotta sitä voidaan käyttää turvallisesti. Seuraavaksi opitte lyhyempiä tapoja käsitellä nullable-arvoja.
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 ”Nullable- ja non-null-tyypit” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Android Academy-oppimispolun 3 oppituntia, myös oppitunnin “Nullable- ja non-null-tyypit”. 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 ”Nullable- ja non-null-tyypit”?
?-tyyppimerkintä. 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 1/4.
Kuinka kauan ”Nullable- ja non-null-tyypit”-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
- Nullable- ja non-null-tyypit
- Turvalliset kutsut ja Elvis-operaattori
- let, also ja scope-funktiot
- NullPointerException-virheiden välttäminen