Kotlin Academy · Lezione

also: effetti collaterali senza modificare il receiver

Utilizzi also per logging, debug e operazioni che producono solo effetti collaterali.

Lezione 3 di 414 passaggi

also: effetti collaterali senza modificare il receiver è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 3 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.

also in breve

also esegue un blocco con il ricevitore come it e restituisce il ricevitore invariato. È perfetto per gli effetti collaterali — logging, debug e convalida — senza interrompere una catena.

Nozioni di base di also

also { ... } esegue un effetto collaterale e restituisce lo stesso valore, così le chiamate possono proseguire naturalmente.

fun main() {
    val nums = listOf(1, 2, 3, 4)
        .also { println("input: $it") }
        .filter { it % 2 == 0 }
        .also { println("filtered: $it") }
    println(nums)
}

also per il logging

Aggiunga istruzioni di log nel mezzo della pipeline senza interromperne il flusso.

fun main() {
    val processed = "  Hello, Kotlin!  "
        .also { println("raw: '$it'") }
        .trim()
        .also { println("trimmed: '$it'") }
        .uppercase()
    println(processed)
}

also per il debug

Usi also per ispezionare lo stato intermedio durante un refactoring — potrà rimuoverlo in seguito senza modificare la catena.

fun main() {
    val sum = (1..5).toList()
        .also { println("list: $it") }
        .sum()
        .also { println("sum: $it") }
    println("final: $sum")
}

also e apply

apply usa this (è migliore per le assegnazioni). also usa it (è migliore per i riferimenti espliciti e gli effetti collaterali).

class Counter {
    var value: Int = 0
}
fun main() {
    val c = Counter().apply { value = 10 } // uses this implicitly
    val d = Counter().also { it.value = 10 } // uses it explicitly
    println("${c.value} / ${d.value}")
}

also per gli effetti collaterali dell'inizializzazione

È utile quando deve eseguire un'operazione su un oggetto durante la sua creazione che non consiste nell'impostare una proprietà.

class Repository {
    val cache = mutableMapOf<String, String>()
    fun init() = println("Repository initialized")
}
fun main() {
    val r = Repository().also { it.init() }
    r.cache["key"] = "value"
    println(r.cache)
}

also restituisce l'originale

Il ricevitore passa invariato — ed è facile concatenare le chiamate.

fun main() {
    val len = "Hello".also { println("got: $it") }.length
    println(len) // 5
}

also per la convalida

Esegua asserzioni nel mezzo della catena.

fun main() {
    val n = listOf(1, 2, 3, 4)
        .filter { it > 0 }
        .also { require(it.isNotEmpty()) { "must have positives" } }
        .sum()
    println(n)
}

Combinare also e let

Usi also per gli effetti collaterali e let per la trasformazione nella stessa pipeline.

fun main() {
    val raw: String? = "  42  "
    val n = raw
        ?.also { println("raw: '$it'") }
        ?.let { it.trim().toIntOrNull() }
        ?.also { println("parsed: $it") }
    println(n)
}

also per aggiungere elementi a una raccolta

Aggiunga un oggetto costruito a una lista direttamente nella catena.

class User(val name: String)
fun main() {
    val users = mutableListOf<User>()
    val ada = User("Ada").also { users.add(it) }
    val ben = User("Ben").also { users.add(it) }
    println(users.map { it.name })
}

Quando usare also

Scelga also quando deve eseguire un effetto collaterale (registrare, convalidare o registrare un elemento), ma desidera che il valore originale prosegua nella catena.

fun main() {
    val total = listOf(10, 20, 30, 40, 50)
        .also { println("count: ${it.size}") }
        .filter { it >= 30 }
        .also { println("kept: $it") }
        .sum()
    println("total: $total")
}

Anti-pattern: usare also per la riassegnazione

Non usi also quando in realtà deve trasformare un valore — per questo esistono let/run.

fun main() {
    val name = "ada"
    // BAD: also returns receiver, so upper is wrong
    // val upper = name.also { it.uppercase() } // upper == "ada"
    val upper = name.let { it.uppercase() }
    println(upper) // ADA
}

Verifica rapida

Quale valore restituisce also dopo aver eseguito il suo blocco?

Riepilogo

also esegue un blocco con effetto collaterale usando it e restituisce il ricevitore. Lo usi per logging, debug, convalida e registrazione — ovunque abbia bisogno di esaminare un valore senza modificarlo. Per le trasformazioni, usi invece let o run.

Gratis per iniziare

Impara Kotlin con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
51
Lezioni
203

Domande Frequenti

La lezione «also: effetti collaterali senza modificare il receiver» è gratuita?

Sì — il testo completo di «also: effetti collaterali senza modificare il receiver» è 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 «also: effetti collaterali senza modificare il receiver»?

Utilizzi also per logging, debug e operazioni che producono solo effetti collaterali. 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 3 di 4.

Quanto tempo richiede la lezione «also: effetti collaterali senza modificare il receiver»?

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. apply e with: configurare e restituire
  2. let e run: trasformare e definire l'ambito
  3. also: effetti collaterali senza modificare il receiver
  4. Scegliere la funzione di ambito corretta: guida decisionale
← Torna a Kotlin Academy