0Pricing
Kotlin Academy · Lezione

apply e with: configurare e restituire

Utilizzi apply e with per configurare gli oggetti e comprenda i valori restituiti.

apply e with: configurare e restituire è 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.

Riepilogo delle scope function

Le scope function di Kotlin (apply, also, let, run, with) consentono di eseguire un blocco nel contesto di un oggetto. Ognuna si distingue per il receiver (this o it) e per il valore restituito.

Basi di apply

apply { ... } esegue il blocco con this associato al receiver e restituisce il receiver stesso. È perfetto per configurare gli oggetti.

class Person {
    var name: String = ""
    var age: Int = 0
}
fun main() {
    val p = Person().apply {
        name = "Ada"
        age = 35
    }
    println("${p.name}, ${p.age}")
}

Perché apply è utile

Senza apply, sarebbe necessaria una variabile temporanea per configurare l'oggetto e poi restituirlo. apply riduce tutto a un'unica espressione.

class Config {
    var host: String = ""
    var port: Int = 0
}
fun makeConfig(): Config {
    // Without apply:
    // val c = Config(); c.host = "x"; c.port = 8080; return c
    return Config().apply {
        host = "localhost"
        port = 8080
    }
}
fun main() {
    val c = makeConfig()
    println("${c.host}:${c.port}")
}

apply in una catena

apply restituisce il receiver, quindi può essere concatenato naturalmente ad altre chiamate di metodo.

class Builder {
    val parts = mutableListOf<String>()
}
fun main() {
    val result = Builder().apply {
        parts.add("hello")
        parts.add("world")
    }.parts.joinToString(" ")
    println(result) // hello world
}

Basi di with

with(receiver) { ... } esegue il blocco con this = receiver e restituisce il risultato della lambda (NON il receiver). È utile quando si desidera calcolare un valore a partire da un receiver.

class Rect(val w: Int, val h: Int)
fun main() {
    val area = with(Rect(3, 4)) {
        w * h
    }
    println(area) // 12
}

apply e with

apply restituisce il receiver, quindi è perfetto per i builder. with restituisce il risultato della lambda, quindi è perfetto per calcolare un valore a partire da un receiver.

class Box(var width: Int = 0, var height: Int = 0)
fun main() {
    val box = Box().apply { width = 10; height = 20 } // returns Box
    val area = with(box) { width * height }            // returns Int
    println("$box area=$area")
}

apply con le liste

Configuri una raccolta modificabile direttamente nell'espressione.

fun main() {
    val list = mutableListOf<String>().apply {
        add("a")
        add("b")
        add("c")
    }
    println(list)
}

apply restituisce lo stesso tipo

Il tipo restituito da apply è sempre il tipo del receiver. Non è necessario un return esplicito.

class Sb {
    private val buf = StringBuilder()
    fun append(s: String): Sb { buf.append(s); return this }
    fun build(): String = buf.toString()
}
fun main() {
    val s = Sb().apply {
        append("Hello, ")
        append("Kotlin!")
    }.build()
    println(s)
}

with per riutilizzare più membri

All'interno di with, tutti i membri del receiver sono disponibili nel contesto: non è necessario il prefisso obj..

class Person(val name: String, val age: Int)
fun main() {
    val description = with(Person("Ada", 35)) {
        "Name: $name, Age: $age, AgeNext: ${age + 1}"
    }
    println(description)
}

apply annidati

È possibile annidare un apply all'interno di un altro apply per configurare oggetti gerarchicamente. Lo utilizzi con moderazione.

class Address {
    var city: String = ""
    var zip: String = ""
}
class User {
    var name: String = ""
    var address: Address = Address()
}
fun main() {
    val u = User().apply {
        name = "Ada"
        address.apply {
            city = "Istanbul"
            zip = "34000"
        }
    }
    println("${u.name} in ${u.address.city}")
}

Quando NON usare apply

Se non è necessario restituire il receiver, preferisca una semplice costruzione con argomenti denominati oppure let/run. Non utilizzi apply solo per variare lo stile.

class Config(val host: String, val port: Int)
fun main() {
    // Named arguments often beat builder + apply:
    val cfg = Config(host = "localhost", port = 8080)
    println("${cfg.host}:${cfg.port}")
}

Verifica rapida

Che cosa restituisce apply dopo aver eseguito il suo blocco?

Riepilogo

apply esegue un blocco con this = ricevitore e restituisce il ricevitore — perfetto per configurare oggetti. with esegue un blocco con this = ricevitore e restituisce il risultato della lambda — perfetto per i valori derivati. Usi gli argomenti denominati quando la configurazione è semplice.

Domande Frequenti

La lezione «apply e with: configurare e restituire» è gratuita?

Sì — il testo completo di «apply e with: configurare e restituire» è 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 «apply e with: configurare e restituire»?

Utilizzi apply e with per configurare gli oggetti e comprenda i valori restituiti. 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 «apply e with: configurare e restituire»?

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