Sobes.tech
Junior

Aké funkcie rozsahu v Kotlin poznáte?

sobes.tech AI

Odpoveď od AI

  • let: Spustí blok kódu na objekte a vráti výsledok posledného výrazu. Často sa používa na bezpečné volanie metód na nullable objektoch.
  • run: Má dve varianty:
    • Ako rozširujúca funkcia: Spustí blok kódu na objekte (this) a vráti výsledok posledného výrazu.
    • Ako samostatná funkcia: Spustí blok kódu bez príjemcu a vráti výsledok posledného výrazu.
  • with: Spustí blok kódu na zadanom objekte-prijímateľovi a vráti výsledok posledného výrazu.
  • apply: Spustí blok kódu na objekte (this) a vráti samotný objekt. Často sa používa na konfiguráciu vlastností objektu.
  • also: Spustí blok kódu na objekte (it) a vráti samotný objekt. Používa sa na vedľajšie akcie na objekte.
// Príklad použitia let
val name: String? = "Kotlin"
val length = name?.let {
    // this == null
    // it == "Kotlin"
    it.length // Vráti dĺžku reťazca
} // length == 6

// Príklad použitia run ako rozšírenej funkcie
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
    listOf(first(), last())
    // this == numbers
} // firstAndLast == [1, 3]

// Príklad použitia run ako samostatnej funkcie
val result = run {
    // Bez príjemcu
    println("Spúšťanie bloku")
    1 + 2 // Vráti 3
} // result == 3

// Príklad použitia with
val configuration = configureUsing {
    // this - objekt odovzdaný do configureUsing
    width = 100
    height = 200
}

fun configureUsing(builder: ScopeExample.() -> Unit): ScopeExample {
    val example = ScopeExample()
    example.builder()
    return example
}

class ScopeExample {
    var width: Int = 0
    var height: Int = 0
}

// Príklad použitia apply
val person = mutableListOf<String>().apply {
    // this == zoznam
    add("Alice")
    add("Bob")
} // person == ["Alice", "Bob"]

// Príklad použitia also
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
    // it == zoznam
    println("Spracovanie zoznamu: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]