Sobes.tech
Junior

Spiega cos'è la sicurezza null nel linguaggio Kotlin.

sobes.tech AI

Risposta dell'AI

Sicurezza null — è una funzione del linguaggio Kotlin che previene errori legati a riferimenti null. Si ottiene creando due tipi di riferimenti: nullable (che permette null) e non-nullable (che non permette null).

I tipi non-nullable vengono dichiarati come di consueto:

var nonNullableString: String = "Hello" // Non può essere null

I tipi nullable vengono dichiarati usando il simbolo ? dopo il nome del tipo:

var nullableString: String? = "Hello" // Può essere null
nullableString = null

Kotlin richiede una gestione esplicita dei tipi nullable, evitando l'accesso diretto ai loro membri senza una verifica preliminare di null. Per questo, fornisce i seguenti meccanismi:

  1. Operatore di chiamata sicura (?.): Chiama un metodo o accede a una proprietà solo se l'oggetto non è null. In caso contrario, restituisce null.

    val length = nullableString?.length // length sarà Int? o null
    
  2. Operatore Elvis (?:): Fornisce un valore di default se l'espressione a sinistra dell'operatore è null.

    val nonNullLength = nullableString?.length ?: 0 // nonNullLength sarà Int, 0 se nullableString è null
    
  3. Operatore di affermazione di non-null (!!): Converte un tipo nullable in non-nullable. Se il valore è null, viene lanciata un'eccezione NullPointerException. Si usa quando si è sicuri che il valore non sia null.

    val sureLength = nullableString!!.length // Lancerà NullPointerException se nullableString è null
    
  4. Controlli con if: Verifica tradizionale di null con if. Il compilatore effettua un smart cast (cast intelligente) del tipo nullable a non-nullable all'interno del blocco if, se il controllo supera.

    if (nullableString != null) {
        val length = nullableString.length // Qui nullableString viene trattato come String
    }
    

Questi meccanismi permettono di gestire esplicitamente le situazioni in cui una variabile può essere null, riducendo significativamente la probabilità di NullPointerException in fase di esecuzione.