Sobes.tech
Middle

Jaký je rozdíl mezi rozšiřujícími funkcemi let, run, also a apply v Kotlinu?

sobes.tech AI

Odpověď od AI

let: Zavolá uzávěr na objektu a vrátí výsledek uzávěru. Umožňuje použít objekt jako argument v lambda výrazu (it). Vhodné pro práci s nullable objekty.

// Příklad použití let
val nullableString: String? = "Hello"
val length = nullableString?.let {
    // it - není null String
    it.length
}

run: Spustí blok kódu na objektu a vrátí výsledek bloku. Uvnitř bloku je objekt dostupný jako this. Užitečné pro inicializaci a volání metod.

// Příklad použití run
val result = buildString {
    // this - StringBuilder
    append("Start\n")
    append("Middle\n")
}.run {
    // this - String
    uppercase()
}

also: Zavolá uzávěr na objektu a vrátí samotný objekt. Umožňuje provádět další akce (například logování nebo konfiguraci) na objektu, aniž by ho měnila.

// Příklad použití also
val list = mutableListOf("a", "b", "c").also {
    // it - MutableList
    println("Seznam vytvořen: $it")
}

apply: Zavolá uzávěr na objektu a vrátí samotný objekt. Uvnitř bloku je objekt dostupný jako this. Užitečné pro nastavení vlastností objektu.

// Příklad použití apply
val textView = TextView(context).apply {
    // this - TextView
    text = "Ahoj, světe!"
    textSize = 16f
    setTextColor(Color.BLACK)
}

Hlavní rozdíly:

Funkce Jak je přístupný objekt Co vrací Typické použití
let it Výsledek lambda Nullable objekty, transformace
run this Výsledek lambda Inicializace a volání metod
also it Samotný objekt Další akce (vedlejší efekty)
apply this Samotný objekt Nastavení vlastností