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:
-
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` -
Operátor Elvis (
?:): Poskytuje výchozí hodnotu, pokud je výraz vlevo od operátorunull.val nonNullLength = nullableString?.length ?: 0 // nonNullLength bude typu `Int`, 0 pokud je nullableString null -
Operátor potvrzení nenull (
!!): Převádí nullable typ na non-nullable. Pokud je hodnotanull, vyvolá výjimkuNullPointerException. Používá se, když je vývojář jistý, že hodnota nenínull.val sureLength = nullableString!!.length // Vyvolá NullPointerException pokud je nullableString null -
Kontroly s
if: Tradiční kontrola nanullpomocíif. Kompilátor provádí tzv. smart cast (chytré přetypování) nullable typu na non-nullable uvnitř blokuif, 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.