Sobes.tech
Junior

Ի՞նչ են 'scope functions'-երը Kotlin-ում և երբ պետք է օգտագործել:

sobes.tech AI

Պատասխան AI-ից

Scope գործառույթները թույլ են տալիս կատարել կոդի բլոկը օբյեկտի կոնտեքստում։ Հիմնական գործառույթները՝ 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 գործառույթի, կախված է այն բանից, թե ինչ է անհրաժեշտ անել օբյեկտի հետ և ինչ արժեք պետք է վերադարձվի։