Sobes.tech
Junior

Објасните шта је null safety у језику Kotlin.

sobes.tech АИ

Одговор од АИ

Null safety — to funkcija jezika Kotlin koja sprečava greške povezane sa null referencama. Postižemo je kreiranjem dva tipa referenci: nullable (dozvoljava null) i non-nullable (ne dozvoljava null).

Non-nullable tipovi se deklarisu kao obično:

var nonNullableString: String = "Hello" // Ne može biti null

Nullable tipovi se deklarisu korišćenjem simbola ? nakon imena tipa:

var nullableString: String? = "Hello" // Može biti null
nullableString = null

Kotlin zahteva eksplicitno rukovanje nullable tipovima, sprečavajući direktan pristup njihovim članovima bez prethodne provere na null. Za to se koriste sledeći mehanizmi:

  1. Operator sigurnog poziva (?.): Poziva metodu ili pristupa svojstvu samo ako objekat nije null. U suprotnom, vraća null.

    val length = nullableString?.length // length će biti `Int?` ili `null`
    
  2. Elvis operator (?:): Pruža podrazumevanu vrednost ako je izraz levo od operatora null.

    val nonNullLength = nullableString?.length ?: 0 // nonNullLength će biti `Int`, 0 ako je nullableString null
    
  3. Operator potvrde nenull (!!): Konvertuje nullable tip u non-nullable. Ako je vrednost null, baca NullPointerException. Koristi se kada je programer siguran da vrednost nije null.

    val sureLength = nullableString!!.length // Baci NullPointerException ako je nullableString null
    
  4. Provere sa if: Tradicionalna provera na null pomoću if. Kompilator vrši tzv. smart cast (pametno prebacivanje) nullable tipa u non-nullable unutar if bloka, ako provera uspe.

    if (nullableString != null) {
        val length = nullableString.length // Ovde se nullableString tretira kao String
    }
    

Ovi mehanizmi omogućavaju eksplicitno upravljanje situacijama kada promenljiva može biti null, čime se značajno smanjuje verovatnoća pojave NullPointerException tokom izvršavanja programa.