Sobes.tech
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 мувофиқи он аст, ки бо объект чӣ кардан мехоҳед ва кадом арзиш бояд баргардонда шавад.