Junior
Функсияҳои доираи Kotlin чӣ мебошанд ва кай бояд истифода шаванд?
sobes.tech AI
Ҷавоб аз AI
Функсияҳои доираи функсияҳо имкон медиҳанд, ки блоки кодро дар контексти объект иҷро кунанд. Функсияҳои асосӣ: let, run, with, apply, also. Ҳар яке хусусиятҳои худро дар бораи қабулкунанда (invoker, receiver) ва арзиши баргардондашударо дорад.
| Функсия | Қабулкунанда | Арзиши баргардондашуда |
|---|---|---|
let |
it |
Натиҷаи изҳороти охирин дар блок |
run |
this |
Натиҷаи изҳороти охирин дар блок |
with |
this (чун усули васеъкунӣ) |
Натиҷаи изҳороти охирин дар блок |
apply |
this |
Объекти худ пас аз танзимот |
also |
it |
Объекти худ пас аз танзимот |
Истифода:
let: Барои иҷрои амалҳо дар бораи объект, ки метавонад null бошад, ё барои ворид кардани тағйирёбандаи маҳаллӣ бо номи кӯтоҳтар.
// Мисол: даъвати бехатарии метод дар объекти nullable
val str: String? = "Hello"
str?.let {
println(it.length) // Танҳо агар str null набошад, иҷро мешавад
}
run: Барои иҷрои блоки код бо контексти объект (монандиwith), аммо ҳамчун усули васеъкунӣ, ё вақте ки бояд арзиш дар контексти объект ҳисоб карда шавад.
// Мисол: танзим ва гирифтани натиҷа
val configurations = buildList {
add("Config 1")
add("Config 2")
}.run {
println("Applying configurations...")
joinToString(", ") // Дар контексти List<String> иҷро мешавад, баргардонандаи String
}
println(configurations)
with: Барои гурӯҳбандии даъвати методҳо дар объект бе истифодаи "нуқта" пеш аз ҳар даъват. Намебошад усули васеъкунӣ.
// Мисол: гурӯҳбандии даъвати методҳо дар объект
val person = Person("Alice", 30)
with(person) {
println(name) // Дастрасӣ ба хосиятҳо мустақим
println(age)
}
apply: Барои танзим ва сохтани объект. Вай худи объектро бармегардонад. Барои сохтани ва оғоз кардани объект дар як израз қулай.
// Мисол: сохтани ва танзим кардани объект дар як қадам
val button = Button().apply {
text = "Click Me"
onClick = { println("Button clicked") }
}
also: Барои иҷрои амалҳои иловагӣ дар бораи объект, масалан, логгирӣ, пас аз як амали муайян. Вай худи объектро бармегардонад.
// Мисол: логгирӣ пас аз иҷрои амал
val number = 42
val squared = number.also {
println("Processing number: $it") // Дар бораи it (number) иҷро мешавад, баргардонандаи number
}.run {
this * this // Дар бораи this (number) иҷро мешавад, баргардонандаи квадрати он
}
println("Squared value: $squared")
Интихоби функсияи scope мувофиқи он аст, ки бо объект чӣ кардан мехоҳед ва кадом арзиш бояд баргардонда шавад.