Sobes.tech
Junior

Vysvětlete, co je to null safety v jazyce Kotlin.

sobes.tech AI

Odpověď od AI

Nullová bezpečnost — je funkce jazyka Kotlin, která zabraňuje chybám souvisejícím s odkazy null. Dosahuje se toho vytvořením dvou typů odkazů: nullable (povolující null) a non-nullable (nepovolující null).

Typy non-nullable jsou deklarovány obvyklým způsobem:

var nonNullableString: String = "Hello" // Nemůže být null

Typy nullable jsou deklarovány s použitím symbolu ? za názvem typu:

var nullableString: String? = "Hello" // Může být null
nullableString = null

Kotlin vyžaduje explicitní zacházení s nullable typy, čímž zabraňuje přímému přístupu k jejich členům bez předchozí kontroly na null. K tomu slouží následující mechanismy:

  1. Operátor bezpečného volání (?.): Volá metodu nebo přistupuje k vlastnosti pouze pokud objekt není null. V opačném případě vrací null.

    val length = nullableString?.length // length bude typu `Int?` nebo `null`
    
  2. Operátor Elvis (?:): Poskytuje výchozí hodnotu, pokud je výraz vlevo od operátoru null.

    val nonNullLength = nullableString?.length ?: 0 // nonNullLength bude typu `Int`, 0 pokud je nullableString null
    
  3. Operátor potvrzení nenull (!!): Převádí nullable typ na non-nullable. Pokud je hodnota null, vyvolá výjimku NullPointerException. Používá se, když je vývojář jistý, že hodnota není null.

    val sureLength = nullableString!!.length // Vyvolá NullPointerException pokud je nullableString null
    
  4. Kontroly s if: Tradiční kontrola na null pomocí if. Kompilátor provádí tzv. smart cast (chytré přetypování) nullable typu na non-nullable uvnitř bloku if, pokud kontrola projde.

    if (nullableString != null) {
        val length = nullableString.length // Zde je nullableString považován za String
    }
    

Tyto mechanismy umožňují explicitně řídit situace, kdy proměnná může být null, což výrazně snižuje pravděpodobnost výskytu NullPointerException během běhu programu.