Sobes.tech
Junior

Vysvetlite, čo je null safety v jazyku Kotlin.

sobes.tech AI

Odpoveď od AI

Null safety — je funkcia jazyka Kotlin, ktorá zabraňuje chybám súvisiacim s null odkazmi. Dosahuje sa vytvorením dvoch typov odkazov: nullable (povoľuje null) a non-nullable (nepovoľuje null).

Non-nullable typy sa deklarujú ako obvykle:

var nonNullableString: String = "Hello" // Nemôže byť null

Nullable typy sa deklarujú použitím symbolu ? za názvom typu:

var nullableString: String? = "Hello" // Môže byť null
nullableString = null

Kotlin vyžaduje explicitné zaobchádzanie s nullable typmi, čím zabraňuje priamej manipulácii s ich členmi bez predchádzajúcej kontroly na null. Na to slúžia nasledujúce mechanizmy:

  1. Operator bezpečného volania (?.): Volá metódu alebo pristupuje k vlastnosti iba ak objekt nie je null. Inak vráti null.

    val length = nullableString?.length // length bude typu `Int?` alebo `null`
    
  2. Operator Elvis (?:): Poskytuje predvolenú hodnotu, ak je výraz vľavo od operátora null.

    val nonNullLength = nullableString?.length ?: 0 // nonNullLength bude typu `Int`, 0 ak je nullableString null
    
  3. Operator potvrdenia nenull (!!): Konvertuje nullable typ na non-nullable. Ak je hodnota null, vyvolá výnimku NullPointerException. Používa sa, keď vývojár je si istý, že hodnota nie je null.

    val sureLength = nullableString!!.length // Vyvolá NullPointerException, ak je nullableString null
    
  4. Kontroly s if: Tradičná kontrola na null pomocou if. Kompilátor vykoná tzv. smart cast (chytré pretypovanie) nullable typu na non-nullable vo vnútri bloku if, ak kontrola prejde.

    if (nullableString != null) {
        val length = nullableString.length // Tu sa nullableString považuje za String
    }
    

Tieto mechanizmy umožňujú explicitne riadiť situácie, keď premenná môže byť null, čím sa výrazne znižuje pravdepodobnosť výskytu NullPointerException počas behu programu.