Sobes.tech
Middle

Kokia yra skirtumas tarp išplėtimo funkcijų let, run, also ir apply Kotlin?

sobes.tech AI

Atsakymas iš AI

let: Iškviečia užrakinimą objektu ir grąžina užrakto rezultatą. Leidžia naudoti objektą kaip lambda išraiškos argumentą (it). Tinka dirbti su nullable objektais.

// Pavyzdys naudojant let
val nullableString: String? = "Hello"
val length = nullableString?.let {
    // it - tai ne-null String
    it.length
}

run: Atlieka kodo bloką ant objekto ir grąžina bloko rezultatą. Bloko viduje objektas yra pasiekiamas kaip this. Naudinga objekto inicializacijai ir metodų iškvietimui.

// Pavyzdys naudojant run
val result = buildString {
    // this - tai StringBuilder
    append("Start\n")
    append("Middle\n")
}.run {
    // this - tai String
    uppercase()
}

also: Iškviečia užrakinimą ant objekto ir grąžina patį objektą. Leidžia atlikti papildomas operacijas (pvz., logavimą ar konfigūraciją) be objekto keitimo.

// Pavyzdys naudojant also
val list = mutableListOf("a", "b", "c").also {
    // it - tai MutableList
    println("Sukurta sąrašas: $it")
}

apply: Iškviečia užrakinimą ant objekto ir grąžina patį objektą. Bloko viduje objektas yra pasiekiamas kaip this. Patogu nustatyti objekto savybes.

// Pavyzdys naudojant apply
val textView = TextView(context).apply {
    // this - tai TextView
    text = "Labas, pasauli!"
    textSize = 16f
    setTextColor(Color.BLACK)
}

Pagrindiniai skirtumai:

Funkcija Kaip pasiekiamas objektas Ką grąžina Tipinė taikymo sritis
let it Lambda rezultatas Nullable objektai, transformacija
run this Lambda rezultatas Objektų inicializacija ir metodų iškvietimas
also it Pats objektas Papildomos operacijos (Side effects)
apply this Pats objektas Objektų savybių nustatymas