Tipi nullable e modificatore ?
Dichiari variabili nullable e comprenda la null safety di Kotlin in fase di compilazione.
Tipi nullable e modificatore ? è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.
Sicurezza rispetto a null in Kotlin
Kotlin distingue, in fase di compilazione, tra i tipi che possono contenere null e quelli che non possono. Il compilatore impedisce la maggior parte delle NullPointerExceptions prima dell'esecuzione.
Tipo non nullable
Per impostazione predefinita, un tipo Kotlin non può essere null. Se prova ad assegnare null, il compilatore rifiuta l'operazione.
fun main() {
val name: String = "Ada"
// val nope: String = null // ERROR
println(name)
}Tipo nullable con ?
Aggiunga ? per consentire null. Il compilatore considera ora la variabile come eventualmente assente.
fun main() {
val name: String? = null
println(name) // null
}Chiamare metodi su valori nullable
Non può chiamare direttamente un metodo su un valore nullable senza gestire prima il caso null. Il compilatore rifiuta l'operazione.
fun main() {
val name: String? = "Bob"
// println(name.length) // ERROR — name might be null
if (name != null) println(name.length) // smart cast
}Smart cast
Dopo un controllo if (x != null), Kotlin converte automaticamente x in un tipo non nullable all'interno del ramo.
fun main() {
val name: String? = "Alice"
if (name != null) {
println("Length: ${name.length}") // safe, smart-cast
} else {
println("No name")
}
}Parametro di funzione nullable
Indichi come nullable i parametri delle funzioni quando potrebbero essere assenti. Chi chiama la funzione deve fornire esplicitamente un valore oppure null.
fun greet(name: String?) {
if (name == null) println("Hello, stranger")
else println("Hello, $name")
}
fun main() {
greet("Sara")
greet(null)
}Tipo restituito nullable
Una funzione che restituisce X? comunica al chiamante che potrebbe restituire null: il chiamante deve gestire questo caso.
fun findUser(id: Int): String? {
return if (id == 1) "Alice" else null
}
fun main() {
val u = findUser(2)
println(u ?: "no user")
}Proprietà nullable
Anche le proprietà delle classi possono essere nullable. È comune quando i campi vengono valorizzati in un secondo momento o recuperati facoltativamente.
data class Profile(
val name: String,
val avatarUrl: String?
)
fun main() {
val p = Profile("Lee", null)
println(p.avatarUrl ?: "(no avatar)")
}Confronto con Java
Dall'interoperabilità con Java, i tipi Java appaiono in Kotlin come platform types (String!): Kotlin si fida di Lei, ma non offre sicurezza rispetto a null. Quando possibile, annoti sempre le API Java con @Nullable/@NotNull.
fun main() {
val maybeList: List<Int>? = null
val listOfMaybe: List<Int?> = listOf(1, null, 3)
println(maybeList?.size) // null
println(listOfMaybe.size) // 3
}Confronto con Java
I tipi Java che passano a Kotlin vengono visualizzati come tipi di piattaforma (String!): Kotlin si fida di Lei, ma non offre alcuna sicurezza rispetto ai valori null. Quando possibile, annoti sempre le API Java con @Nullable/@NotNull.
fun main() {
val maybeNull: String? = System.getenv("FOO") // null if unset
println("env FOO = ${maybeNull ?: "(unset)"}")
}Perché è importante
La sicurezza rispetto a null in fase di compilazione previene un'intera classe di arresti anomali durante l'esecuzione. Abbracci il modificatore ?: documenta l'intento e impone la gestione del caso.
fun divide(a: Int, b: Int): Int? = if (b == 0) null else a / b
fun main() {
val r1 = divide(10, 2) // 5
val r2 = divide(10, 0) // null — handled at call site
println("$r1, $r2")
}Verifica rapida
Che cosa significa ? alla fine della dichiarazione di un tipo?
Riepilogo
Per impostazione predefinita, i tipi Kotlin non sono nullable. Aggiunga ? per consentire null. Il compilatore impone la gestione di null tramite smart cast, chiamate sicure e l'operatore Elvis, prevenendo la maggior parte delle NullPointerExceptions prima dell'esecuzione.
Domande Frequenti
La lezione «Tipi nullable e modificatore ?» è gratuita?
Sì — il testo completo di «Tipi nullable e modificatore ?» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.
Cosa imparerò in «Tipi nullable e modificatore ?»?
Dichiari variabili nullable e comprenda la null safety di Kotlin in fase di compilazione. Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Kotlin Academy?
Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Tipi nullable e modificatore ?»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?
Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Tipi nullable e modificatore ?
- Safe call ?. ed Elvis ?: nel codice reale
- let, also e run con receiver nullable
- Operatore !!: quando e perché evitarlo