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 (withkabi), 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.