Sobes.tech
Middle

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