Sobes.tech
Junior

Koje funkcije opsega u Kotlinu poznajete?

sobes.tech АИ

Одговор од АИ

  • let: Izvršava blok koda na objektu i vraća rezultat poslednje izraza. Često se koristi za sigurne pozive metoda na nullable objektima.
  • run: Ima dve varijante:
    • Kao proširajuća funkcija: Izvršava blok koda na objektu (this) i vraća rezultat poslednje izraza.
    • Kao samostalna funkcija: Izvršava blok koda bez primaoca i vraća rezultat poslednje izraza.
  • with: Izvršava blok koda na datom objektu-prijemniku i vraća rezultat poslednje izraza.
  • apply: Izvršava blok koda na objektu (this) i vraća sam objekat. Često se koristi za konfiguraciju svojstava objekta.
  • also: Izvršava blok koda na objektu (it) i vraća sam objekat. Koristi se za sporedne radnje na objektu.
// Primer korišćenja let
val name: String? = "Kotlin"
val length = name?.let {
    // this == null
    // it == "Kotlin"
    it.length // Vraća dužinu niza
} // length == 6

// Primer korišćenja run kao proširene funkcije
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
    listOf(first(), last())
    // this == numbers
} // firstAndLast == [1, 3]

// Primer korišćenja run kao samostalne funkcije
val result = run {
    // Bez primaoca
    println("Pokretanje bloka")
    1 + 2 // Vraća 3
} // result == 3

// Primer korišćenja with
val configuration = configureUsing {
    // this - objekat prosleđen u 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
}

// Primer korišćenja apply
val person = mutableListOf<String>().apply {
    // this == lista
    add("Alice")
    add("Bob")
} // person == ["Alice", "Bob"]

// Primer korišćenja also
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
    // it == lista
    println("Obrada liste: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]