0Pricing
Kotlin Academy · Lezione

Smart cast

Esegua il cast automatico dopo i controlli

Smart cast è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 2 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.

Cosa sono gli smart cast

Dopo aver verificato il tipo di un valore, Kotlin memorizza questa informazione. All'interno del blocco verificato, tratta automaticamente il valore come appartenente al tipo più specifico.

Questa funzionalità si chiama smart cast ed evita di eseguire cast manualmente.

Smart cast dopo is

Una volta superato un controllo is, può usare il valore come appartenente a quel tipo senza scrivere un cast.

Il compilatore lo inserisce automaticamente.

fun describe(x: Any) {
    if (x is String) {
        println(x.length) // x is smart-cast to String
    }
}

fun main() {
    describe("hello")
}

Smart cast dopo un controllo di null

Gli smart cast funzionano anche con la nullability. Dopo aver confermato che un valore non è null, il valore viene trattato come non nullo.

fun length(text: String?): Int {
    if (text != null) {
        return text.length // smart-cast to non-null String
    }
    return 0
}

fun main() {
    println(length("abc"))
    println(length(null))
}

Smart cast in when

Anche i controlli dei tipi all'interno di when abilitano gli smart cast in ogni ramo.

È il modo idiomatico di gestire più tipi possibili.

fun area(shape: Any): Double = when (shape) {
    is Int -> shape.toDouble()
    is String -> shape.length.toDouble()
    else -> 0.0
}

fun main() {
    println(area(5))
    println(area("hello"))
}

Smart cast con restituzione anticipata

Se restituisce il risultato in anticipo quando un valore è null, il compilatore sa che in seguito il valore non è nullo.

Il resto della funzione può usare il valore in sicurezza.

fun process(text: String?) {
    if (text == null) return
    println(text.uppercase()) // smart-cast here
}

fun main() {
    process("data")
    process(null)
}

Smart cast con restituzione tramite Elvis

Anche la combinazione dell'operatore Elvis con return attiva uno smart cast per il codice restante.

fun process(text: String?) {
    val safe = text ?: return
    println(safe.length) // safe is non-null
}

fun main() {
    process("hi")
    process(null)
}

Condizioni combinate

Gli smart cast rispettano la logica delle condizioni combinate che usano &&.

Dopo il controllo del tipo a sinistra, il lato destro vede già il tipo più specifico.

fun check(x: Any) {
    if (x is String && x.length > 3) {
        println("long string")
    } else {
        println("other")
    }
}

fun main() {
    check("hello")
    check(2)
}

Quando gli smart cast non funzionano

Gli smart cast richiedono la garanzia che il valore non cambi tra il controllo e il suo utilizzo.

Una var mutabile che potrebbe cambiare in concorrenza potrebbe non consentire uno smart cast. Preferisca val per ottenere smart cast affidabili.

fun main() {
    val text: String? = "stable"
    if (text != null) {
        println(text.length) // val smart-casts cleanly
    }
}

Un val locale è la scelta più sicura

Copiare un valore in un val locale rende affidabili gli smart cast.

È uno schema comune quando si lavora con proprietà nullable.

class Box(val content: String?)

fun main() {
    val box = Box("item")
    val c = box.content
    if (c != null) {
        println(c.uppercase())
    }
}

Smart cast e cast esplicito

Gli smart cast sostituiscono la maggior parte dei cast espliciti con as. Sono più sicuri perché si applicano solo dove il tipo è stato dimostrato.

Ora imparerà a usare esplicitamente is e as.

fun main() {
    val x: Any = "text"
    if (x is String) {
        // no need for (x as String)
        println(x.reversed())
    }
}

Mettere tutto insieme

Gli smart cast permettono al compilatore di restringere automaticamente i tipi:

  • Dopo i controlli is → cast al tipo verificato
  • Dopo i controlli di null → cast al tipo non nullo
  • Funzionano in if, when e dopo le restituzioni anticipate
  • Sono più affidabili con val
fun render(x: Any): String {
    if (x is Int) return "number " + x
    if (x is String) return "text " + x.uppercase()
    return "unknown"
}

fun main() {
    println(render(7))
    println(render("go"))
}

Verifica rapida

Verifichi la Sua comprensione degli smart cast.

Riepilogo

Ha imparato a usare gli smart cast:

  • I controlli dei tipi e di null restringono automaticamente il tipo
  • Funzionano in if, when e dopo le restituzioni anticipate
  • val offre gli smart cast più affidabili

Ora studierà direttamente gli operatori is e as.

Domande Frequenti

La lezione «Smart cast» è gratuita?

Sì — il testo completo di «Smart cast» è 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 «Smart cast»?

Esegua il cast automatico dopo i controlli 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 2 di 4.

Quanto tempo richiede la lezione «Smart cast»?

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. when come espressione
  2. Smart cast
  3. Operatori is e as
  4. when esaustivo
← Torna a Kotlin Academy