Sobes.tech
Junior

Magyarázza el, mi az a null biztonság a Kotlin nyelvben.

sobes.tech MI

Válasz az MI-től

Null biztonság — ez a Kotlin nyelv egyik funkciója, amely megakadályozza a null hivatkozásokkal kapcsolatos hibákat. Két típusú hivatkozás létrehozásával érhető el: nullable (amely megengedi a null-t) és non-nullable (amely nem engedi a null-t).

A non-nullable típusokat szokás szerint deklarálják:

var nonNullableString: String = "Hello" // Nem lehet null

A nullable típusokat a típus neve után a ? szimbólummal deklarálják:

var nullableString: String? = "Hello" // Lehet null
nullableString = null

A Kotlin explicit módon megköveteli a nullable típusok kezelését, elkerülve a közvetlen hozzáférést azok tagjaihoz null ellenőrzés nélkül. Ehhez a következő mechanizmusokat biztosítja:

  1. Biztonságos hívás operátor (?.): Csak akkor hív meg egy metódust vagy ér el egy tulajdonságot, ha az objektum nem null. Ellenkező esetben null-t ad vissza.

    val length = nullableString?.length // length `Int?` vagy `null`
    
  2. Elvis operátor (?:): Alapértelmezett értéket ad, ha a bal oldali kifejezés null.

    val nonNullLength = nullableString?.length ?: 0 // nonNullLength `Int`, 0 ha nullableString null
    
  3. Nem-null állítás operátor (!!): Nullable típust non-nullable-vá alakít. Ha az érték null, NullPointerException-t dob. Akkor használják, amikor a fejlesztő biztos benne, hogy az érték nem null.

    val sureLength = nullableString!!.length // NullPointerException-t dob, ha nullableString null
    
  4. if-ellenőrzések: Hagyományos null-ellenőrzés if-tel. A fordító okos típusátalakítást (smart cast) hajt végre a nullable típusból non-nullable-vá az if blokkban, ha a feltétel igaz.

    if (nullableString != null) {
        val length = nullableString.length // Itt nullableString String-ként kezelendő
    }
    

Ezek a mechanizmusok lehetővé teszik a null-tartományba eső változók explicit kezelését, jelentősen csökkentve a NullPointerException előfordulásának valószínűségét a futás során.