with
Raggruppi le operazioni
with è 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.
La funzione with
with è una funzione di ambito che prende un oggetto come argomento (non come ricevente di una chiamata) ed esegue un blocco con quell'oggetto come this. Restituisce il risultato della lambda.
Uso di base di with
Passa l'oggetto a with e accede direttamente ai suoi membri all'interno del blocco.
fun main() {
val name = "Kotlin"
val description = with(name) {
"$this has $length characters"
}
println(description)
}Raggruppare più operazioni
with è particolarmente utile quando deve chiamare diversi metodi o leggere diverse proprietà dello stesso oggetto. Evita di ripetere il nome dell'oggetto.
fun main() {
val sb = StringBuilder()
with(sb) {
append("Line 1\n")
append("Line 2\n")
append("Line 3")
}
println(sb)
}with utilizza this
Come run e apply, with espone l'oggetto come this, quindi per accedere ai membri non serve alcun prefisso.
data class Rectangle(val width: Int, val height: Int)
fun main() {
val rect = Rectangle(4, 5)
val area = with(rect) {
width * height
}
println("Area: $area")
}with restituisce il risultato della lambda
Il valore dell'ultima espressione nel blocco diventa il risultato di with, proprio come con run.
fun main() {
val list = listOf(1, 2, 3, 4, 5)
val summary = with(list) {
"Size=$size, First=${first()}, Last=${last()}"
}
println(summary)
}with e run a confronto
with(obj) { ... } e obj.run { ... } svolgono quasi la stessa funzione. La differenza riguarda la sintassi:
runè un'estensione chiamata sull'oggetto, quindi funziona bene con le chiamate sicure.withprende l'oggetto come argomento e si legge naturalmente come "con questo oggetto, esegui...".
fun main() {
val s = "data"
val a = with(s) { uppercase() }
val b = s.run { uppercase() }
println("$a $b")
}with non è adatto ai nullable
Poiché l'oggetto viene passato come argomento, with non si combina bene con l'operatore di chiamata sicura. Per i riceventi nullable preferisca obj?.run { } o obj?.let { }.
fun main() {
val name: String? = "Eve"
name?.run { println("Hello $this") }
println("with is awkward for nullables")
}Leggere e calcolare insieme
Un modello comune consiste nel leggere diverse proprietà e calcolare un unico risultato, tutto all'interno di un blocco leggibile.
data class Order(val items: Int, val pricePerItem: Int)
fun main() {
val order = Order(3, 20)
val total = with(order) {
items * pricePerItem
}
println("Total: $total")
}Costruire stringhe con with
In combinazione con buildString o StringBuilder, with consente di scrivere codice di costruzione pulito e senza prefissi.
fun main() {
val report = StringBuilder()
with(report) {
appendLine("Report")
appendLine("======")
appendLine("All good")
}
print(report)
}with su una collection
Può chiamare molte funzioni della collection sulla stessa lista senza ripeterne il nome.
fun main() {
val numbers = listOf(10, 20, 30)
with(numbers) {
println("Sum: ${sum()}")
println("Max: ${max()}")
println("Average: ${average()}")
}
}Quando utilizzare with
Scelga with quando dispone di un oggetto non null e desidera eseguire su di esso un gruppo di operazioni, restituendo eventualmente un risultato. Comunica l'idea: "sto lavorando con questo oggetto per un po'".
Verifica rapida
In che modo with riceve il proprio oggetto?
Riepilogo
with raggruppa le operazioni su un singolo oggetto non null passato come argomento, lo espone come this e restituisce il risultato della lambda. È simile a run, ma utilizza la sintassi con argomento. Ora imparerà a scegliere la funzione di ambito più adatta a ogni situazione.
Domande Frequenti
La lezione «with» è gratuita?
Sì — il testo completo di «with» è 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 «with»?
Raggruppi le operazioni 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 «with»?
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.