0Pricing
Kotlin Academy · Lezione

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

  1. Tipi nullable e modificatore ?
  2. Safe call ?. ed Elvis ?: nel codice reale
  3. let, also e run con receiver nullable
  4. Operatore !!: quando e perché evitarlo
← Torna a Kotlin Academy