Sobes.tech
Junior

Milyen láthatósági funkciókat ismersz Kotlinben?

sobes.tech MI

Válasz az MI-től

  • let: Egy objektumon belül egy kódrészletet futtat, és visszaadja az utolsó kifejezés eredményét. Gyakran használják null értékű objektumok biztonságos hívására.
  • run: Két változatban létezik:
    • Bővítményként: Egy objektum (this) felett futtat egy kódrészletet, és visszaadja az utolsó kifejezés eredményét.
    • Független függvényként: Kódblokkot futtat anélkül, hogy fogadó objektum lenne, és visszaadja az utolsó kifejezés eredményét.
  • with: Egy argumentumként adott fogadó objektumon futtat egy kódrészletet, és visszaadja az utolsó kifejezés eredményét.
  • apply: Egy objektum (this) felett futtat egy kódrészletet, és visszaadja az objektumot. Gyakran használják az objektum tulajdonságainak konfigurálására.
  • also: Egy objektumon (it) futtat egy kódrészletet, és visszaadja az objektumot. Másodlagos műveletek végrehajtására használják.
// let használatának példája
val name: String? = "Kotlin"
val length = name?.let {
    // this == null
    // it == "Kotlin"
    it.length // A string hosszának visszaadása
} // length == 6

// run kiterjesztésként
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
    listOf(first(), last())
    // this == numbers
} // firstAndLast == [1, 3]

// run független függvényként
val result = run {
    // Fogadó nélkül
    println("Blokk futtatása")
    1 + 2 // 3 visszaadása
} // result == 3

// with használat
val configuration = configureUsing {
    // this - az átadott objektum
    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
}

// apply példája
val person = mutableListOf<String>().apply {
    // this == lista
    add("Alice")
    add("Bob")
} // person == ["Alice", "Bob"]

// also példája
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
    // it == lista
    println("Lista feldolgozása: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]