Sobes.tech
Junior

Kotlin'da 'doir funksiyalar' nima va qachon foydalanish kerak?

sobes.tech AI

AIdan javob

Kapsam funksiyalari ob'uvni kontekstida kod blokini bajarishga imkon beradi. Asosiy funksiyalar: let, run, with, apply, also. Har biri qabul qiluvchi (invoker, receiver) va qaytariladigan qiymat bilan bog'liq o'ziga xos xususiyatlarga ega.

Funksiya Qabul qiluvchi Qaytariladigan qiymat
let it Blokdagi oxirgi ifoda natijasi
run this Blokdagi oxirgi ifoda natijasi
with this (kengaytirish metod sifatida emas) Blokdagi oxirgi ifoda natijasi
apply this Sozlangan ob'ekt o'zi
also it Sozlangan ob'ekt o'zi

Foydalanish:

  • let: Null bo'lishi mumkin bo'lgan ob'ekt ustida harakat qilish yoki qisqa nomli lokal o'zgaruvchi kiritish uchun.
// Misol: nullable ob'ektga xavfsiz metod chaqiruvi
val str: String? = "Hello"
str?.let {
    println(it.length) // Faqat str null emas bo'lsa bajariladi
}
  • run: Ob'ekt kontekstida kod blokini bajarish (with kabi), lekin kengaytirish metod sifatida yoki ob'ekt kontekstida qiymat hisoblash uchun.
// Misol: ob'ektni sozlash va natijani olish
val configurations = buildList {
    add("Config 1")
    add("Config 2")
}.run {
    println("Konfiguratsiyalar qo'llanilmoqda...")
    joinToString(", ") // List<String> kontekstida bajariladi, String qaytaradi
}
println(configurations)
  • with: Bir ob'ekt metod chaqiruvlarini guruhlash uchun, har chaqiruvdan oldin "nuqta" ishlatmasdan. Kengaytirish metodi emas.
// Misol: bir ob'ektning metod chaqiruvlarini guruhlash
val person = Person("Alice", 30)
with(person) {
    println(name) // To'g'ridan-to'g'ri xususiyatlarga kirish
    println(age)
}
  • apply: Ob'ektni sozlash uchun. O'zi qaytaradi. Ob'ektni yaratish va bir ifoda ichida sozlash uchun qulay.
// Misol: ob'ektni yaratish va sozlash
val button = Button().apply {
    text = "Click Me"
    onClick = { println("Tugma bosildi") }
}
  • also: Ob'ekt ustida qo'shimcha harakatlar qilish, masalan, log yozish, bajarilgan operatsiyadan so'ng. O'zi qaytaradi.
// Misol: harakatdan so'ng log yozish
val number = 42
val squared = number.also {
    println("Raqamni ishlash: $it") // it ustida bajariladi (number), number qaytariladi
}.run {
    this * this // bu yerda bajariladi, kvadrat qaytariladi
}
println("Kvadrat qiymati: $squared")

To'g'ri scope funksiyasini tanlash, ob'ekt bilan nima qilishni va qaysi qiymatni qaytarishni xohlayotganingizga bog'liq.