Kotlin Academy · Oppitunti

Alustatyypit

Java-peräiset nullability-tyypit

Oppitunti 4/413 vaihetta

Alustatyypit on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/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.

Kotlin kohtaa Javan

Kotlin toimii JVM:llä ja kutsuu jatkuvasti Java-koodia. Javassa ei kuitenkaan ole käsitettä nullable- ja ei-null-tyypeille.

Miten Kotlin siis käsittelee Javasta tulevaa arvoa? Platform-tyyppien avulla.

Mikä on platform-tyyppi

Platform-tyyppi on Javalta saatu tyyppi, jonka nullability on tuntematon.

Kotlin kirjoittaa sen virheilmoituksissa muodossa String!. Huutomerkki tarkoittaa, että arvo voi olla null tai ei-null, eikä Kotlin pakota valitsemaan kumpaakaan.

Väljempi tarkistus

Platform-tyyppien kohdalla Kotlin höllentää null-tarkistuksiaan. Voitte käsitellä arvoa ei-null-arvona ilman kääntäjän virheilmoitusta.

Kääntöpuolena on, että jos arvo onkin null, saatte ajonaikaisen NullPointerException-poikkeuksen.

Te valitsette tyypin

Kun tallennatte platform-tyyppisen arvon, päätätte itse, miten se tyypitetään:

  • ei-null-tyyppinä String → kätevää mutta riskialtista
  • nullable-tyyppinä String? → turvallista ja selkeää

Tämä Kotlin-esimerkki jäljittelee kyseistä valintaa.

fun fromJava(): String? = "value from Java"

fun main() {
    val safe: String? = fromJava()
    println(safe?.length)
}

Riskialtis valinta

Jos oletatte arvon olevan ei-null ja lähde palauttaa null-arvon, koodi kaatuu sijoituksen tai ensimmäisen käyttökerran kohdalla.

Tämä on platform-tyyppien piilevä vaara.

fun fromJava(): String? = null

fun main() {
    try {
        val risky: String = fromJava()!!
        println(risky.length)
    } catch (e: NullPointerException) {
        println("Null came from the Java side")
    }
}

Annotaatiot auttavat

Java-kirjastot voivat käyttää annotaatioita, kuten @Nullable ja @NotNull.

Kun annotaatiot ovat käytössä, Kotlin huomioi ne ja antaa platform-tyypin sijaan asianmukaisen String?- tai String-tyypin.

Hyvä käytäntö: olettakaa nullable

Kun kutsutte Java-koodia, jossa ei ole annotaatioita, turvallinen tapa on käsitellä tulosta nullablenä.

Tyypittäkää muuttujanne ?-merkillä ja käyttäkää turvallisia kutsuja aivan kuten minkä tahansa Kotlinin nullablen kanssa.

fun fromJava(): String? = "data"

fun main() {
    val value: String? = fromJava()
    val length = value?.length ?: 0
    println(length)
}

Suojaavat rajat

Käsitelkää Java-rajaa epäluotettavana. Vahvistakaa arvot tai antakaa niille oletusarvot heti, kun ne saapuvat Kotlin-koodiin.

Sen jälkeen muu koodinne voi käyttää selkeitä Kotlin-tyyppejä.

fun fromJava(): String? = null

fun main() {
    val name = fromJava() ?: "default"
    // from here on, name is a clean non-null String
    println(name.uppercase())
}

Miksi Kotlin sallii tämän

Kotlin voisi pakottaa jokaisen Java-arvon nullableksi, mutta se tekisi Java-yhteentoimivuudesta tuskallisen monisanaista.

Platform-tyypit ovat käytännöllinen kompromissi: ne tarjoavat helppoutta ja mahdollisuuden tiukkaan tyypitykseen.

Platform-tyyppien tunnistaminen

Ette kirjoita itse String!-tyyppiä. Se näkyy vain IDE:n vihjeissä ja virheilmoituksissa, kun tarkastelette Java-lähteistä peräisin olevia arvoja.

Kun näette !-merkin, päättäkää nullability tarkoituksella.

Kootaan kokonaisuus

Platform-tyypit yhdistävät Javan ja Kotlinin:

  • Niiden nullability on tuntematon, ja ne esitetään muodossa Type!
  • Kotlin antaa teidän valita nullablen tai ei-null-tyypin
  • Olettakaa arvo nullableksi, jos olette epävarmoja, jotta pysytte turvassa
  • Annotaatiot poistavat arvailun tarpeen
fun fromJava(): String? = "safe value"

fun main() {
    val value: String? = fromJava()
    println(value?.uppercase() ?: "missing")
}

Pikatesti

Testatkaa, miten hyvin ymmärrätte platform-tyypit.

Kertaus

Olette oppineet, miten nullability ylittää Java-rajan:

  • Platform-tyyppien nullability on tuntematon
  • Kotlin höllentää tarkistuksia, mutta väärä oletus aiheuttaa ajonaikaisen NPE:n
  • Olettakaa arvot nullableiksi ja antakaa niille oletusarvot rajalla
  • Java-annotaatiot palauttavat asianmukaiset tyypit

Tähän päättyy null-turvallisuuden perusteellinen tarkastelu.

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 ”Alustatyypit” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “Alustatyypit”. 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 ”Alustatyypit”?

Java-peräiset nullability-tyypit 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 4/4.

Kuinka kauan ”Alustatyypit”-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- ja non-null-tyypit
  2. Turvalliset kutsut ja Elvis
  3. !!-operaattori
  4. Alustatyypit
← Takaisin: Kotlin Academy