ProgrammazioneSviluppatore Kotlin

Spiega le caratteristiche del lavoro con i tipi Nullable in Kotlin. Quali strumenti del linguaggio consentono di lavorare in modo sicuro con valori null? Fornisci un esempio di codice e descrivi le migliori pratiche.

Supera i colloqui con l'assistente IA Hintsage

Risposta.

Kotlin implementa il lavoro sicuro con null grazie a un sistema di tipi: qualsiasi tipo per impostazione predefinita non può essere null, ad esempio, val a: String = null genererà un errore di compilazione. Per indicare la possibilità di assegnare null si utilizza il simbolo di domanda ?, ad esempio:

val name: String? = null

Per lavorare con i tipi Nullable sono disponibili:

  • Operatore di chiamata sicura: ?., che restituisce null se l'oggetto stesso è null, e chiama il metodo/campo nel caso contrario: name?.length.
  • Operatore di Elvis: ?:, per impostare un valore predefinito se a sinistra c'è null: val length = name?.length ?: 0
  • Controllo tramite if/when: Esempio:
if (name != null) { println(name.length) }
  • Operatore assert ( !! ): Ottieni forzatamente il valore, generando NullPointerException se l'oggetto è null (usato con molta cautela):
val length = name!!.length

Migliori pratiche: ridurre al minimo i tipi Nullable, utilizzare l'operatore di chiamata sicura e l'operatore di Elvis, evitare !!, modellare esplicitamente le situazioni in cui null è consentito.

Domanda ingannevole.

È possibile assegnare al tipo val a: String un valore null, e come evitarlo?

Risposta: No, per impostazione predefinita in Kotlin i tipi non possono essere uguali a null. Per consentire l'assegnazione di null, è necessario specificare esplicitamente val a: String? = null. I tipi senza ? sono sempre non-null.

Esempi di errori reali a causa della mancanza di conoscenza delle sottigliezze dell'argomento.


Storia

Nel progetto di un'applicazione bancaria, una variabile di tipo User memorizzava il risultato della ricerca di un cliente. Lo sviluppatore ha definito var user: User, ma a volte il cliente non veniva trovato e il servizio restituiva null. Ciò generava NPE e crash massivi.


Storia

In un chatbot di supporto si usava !! per accedere ai messaggi dell'utente (message!!.text), pensando che i messaggi arrivassero sempre. Il bot è crollato al primo messaggio vuoto. La chiamata sicura avrebbe evitato il problema.


Storia

Nell'app mobile, i dati dal database potevano non essere stati caricati e arrivavano come null. Invece di un accesso sicuro, lo sviluppatore ha utilizzato accesso diretto, causando crash in tutti i casi di dati incompleti.