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