Care este diferența dintre funcțiile de extensie let, run, also și apply în Kotlin?
sobes.tech AI
Răspuns de la AI
let: Apelează o închidere pe un obiect și returnează rezultatul închiderii. Permite utilizarea obiectului ca argument în expresia lambda (it). Potrivit pentru lucrul cu obiecte nullable.
// Exemplu de utilizare let
val nullableString: String? = "Hello"
val length = nullableString?.let {
// it - este un String non-null
it.length
}
run: Execută un bloc de cod pe un obiect și returnează rezultatul blocului. În interiorul blocului, obiectul este accesibil ca this. Util pentru inițializare și apelarea metodelor.
// Exemplu de utilizare run
val result = buildString {
// this - este un StringBuilder
append("Start\n")
append("Middle\n")
}.run {
// this - este un String
uppercase()
}
also: Apelează o închidere pe un obiect și returnează același obiect. Permite efectuarea de acțiuni suplimentare (cum ar fi logarea sau configurarea) asupra obiectului fără a-l modifica.
// Exemplu de utilizare also
val list = mutableListOf("a", "b", "c").also {
// it - este un MutableList
println("Lista creată: $it")
}
apply: Apelează o închidere pe un obiect și returnează același obiect. În interiorul blocului, obiectul este accesibil ca this. Util pentru configurarea proprietăților obiectului.
// Exemplu de utilizare apply
val textView = TextView(context).apply {
// this - este un TextView
text = "Salut, lume!"
textSize = 16f
setTextColor(Color.BLACK)
}
Diferențele principale:
| Funcție | Cum se accesează obiectul | Ce returnează | Utilizare tipică |
|---|---|---|---|
let |
it |
Rezultatul lambda | Obiecte nullable, transformare |
run |
this |
Rezultatul lambda | Inițializare și apeluri de metode |
also |
it |
Obiectul însuși | Acțiuni suplimentare (efecte secundare) |
apply |
this |
Obiectul însuși | Configurarea proprietăților |