Junior
Kotlin-də 'sahə funksiyaları' nədir və nə vaxt istifadə edilməlidir?
sobes.tech Süni İntellekt
AI-dan cavab
Scope funksiyaları obyektin kontekstində kod bloku icra etməyə imkan verir. Əsas funksiyalar: let, run, with, apply, also. Hər biri alıcı (invoker, receiver) və qaytarılan dəyər baxımından öz xüsusiyyətlərinə malikdir.
| Funksiya | Alıcı | Qaytarılan dəyər |
|---|---|---|
let |
it |
Blokdakı son ifadənin nəticəsi |
run |
this |
Blokdakı son ifadənin nəticəsi |
with |
this (genişləndirmə metodu kimi deyil) |
Blokdakı son ifadənin nəticəsi |
apply |
this |
Tənzimlənmiş obyekt özü |
also |
it |
Tənzimlənmiş obyekt özü |
İstifadə:
let: Null ola bilən obyekt üzərində əməliyyatlar aparmaq və ya daha qısa adlı lokal dəyişən daxil etmək üçün.
// Nümunə: nullable obyekt üzərində təhlükəsiz metod çağırışı
val str: String? = "Hello"
str?.let {
println(it.length) // Yalnız str null deyilsə işləyəcək
}
run: Obyektin kontekstində kod bloku icra etmək (withkimi), lakin genişləndirmə metodu kimi və ya obyektin kontekstində dəyər hesablamaq üçün.
// Nümunə: obyektin tənzimlənməsi və nəticənin alınması
val configurations = buildList {
add("Config 1")
add("Config 2")
}.run {
println("Konfiqurasiyalar tətbiq olunur...")
joinToString(", ") // List<String> kontekstində icra olunur, String qaytarır
}
println(configurations)
with: Bir obyektin metod çağırışlarını qruplaşdırmaq üçün, hər çağırışdan əvvəl "nöqtə" istifadə etmədən. Bu genişləndirmə metodu deyil.
// Nümunə: eyni obyektin metod çağırışlarının qruplaşdırılması
val person = Person("Alice", 30)
with(person) {
println(name) // Birbaşa xassələrə giriş
println(age)
}
apply: Obyekti tənzimləmək üçün. Özünü qaytarır. Objekti yaratmaq və tənzimləmək üçün əlverişlidir.
// Nümunə: obyektin yaradılması və tənzimlənməsi
val button = Button().apply {
text = "Click Me"
onClick = { println("Düyməyə basıldı") }
}
also: Obiekt üzərində əlavə əməliyyatlar aparmaq, məsələn, loglama, və ya başqa əməliyyatlar sonrası. Özünü qaytarır.
// Nümunə: əməliyyatdan sonra loglama
val number = 42
val squared = number.also {
println("Rəqəmin işlənməsi: $it") // it üzərində işləyir (number), number qaytarır
}.run {
this * this // Bu üzərində işləyir (number), kvadratını qaytarır
}
println("Kvadrat dəyəri: $squared")
Uyğun scope funksiyasını seçmək, obyektlə nə etmək istədiyinizə və hansı dəyərin qaytarılmasına bağlıdır.