Sobes.tech
Junior

Kotlin'da qaysi doira funksiyalarini bilasiz?

sobes.tech AI

AIdan javob

  • let: Ob'ekt ustida kod blokini bajaradi va oxirgi ifoda natijasini qaytaradi. Nulable ob'ektlardagi metodlarni xavfsiz chaqirish uchun ko'pincha ishlatiladi.
  • run: Ikki variantga ega:
    • Kengaytirish funktsiyasi sifatida: Ob'ekt (this) ustida kod blokini bajaradi va oxirgi ifoda natijasini qaytaradi.
    • Mustaqil funktsiya sifatida: Kontekstsiz kod blokini bajaradi va oxirgi ifoda natijasini qaytaradi.
  • with: Argument sifatida berilgan ob'ekt-rezident ustida kod blokini bajaradi va oxirgi ifoda natijasini qaytaradi.
  • apply: Ob'ekt (this) ustida kod blokini bajaradi va ob'ektni o'zi bilan qaytaradi. Ob'ektning xususiyatlarini sozlash uchun ko'pincha ishlatiladi.
  • also: Ob'ekt (it) ustida kod blokini bajaradi va ob'ektni o'zi bilan qaytaradi. Ob'ekt ustida yon ta'sirlarni bajarish uchun ishlatiladi.
// let dan foydalanish misoli
val name: String? = "Kotlin"
val length = name?.let {
    // this == null
    // it == "Kotlin"
    it.length // Satr uzunligini qaytaradi
} // length == 6

// run ni kengaytirish sifatida foydalanish misoli
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
    listOf(first(), last())
    // this == numbers
} // firstAndLast == [1, 3]

// run ni mustaqil funktsiya sifatida foydalanish misoli
val result = run {
    // Receiver yo'q
    println("Blok ishga tushirilmoqda")
    1 + 2 // 3 qaytaradi
} // result == 3

// with ni foydalanish misoli
val configuration = configureUsing {
    // this - configureUsing ga berilgan ob'ekt
    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 ni foydalanish misoli
val person = mutableListOf<String>().apply {
    // this == ro'yxat
    add("Alice")
    add("Bob")
} // person == ["Alice", "Bob"]

// also ni foydalanish misoli
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
    // it == ro'yxat
    println("Ro'yxatni qayta ishlash: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]