Middle+
რა მიზნით გამოიყენება `crossinline` მორფი Kotlin-ში?
sobes.tech AI
პასუხი AI-სგან
crossinline ცვლილება გამოიყენება inline ფუნქციების lambda პარამეტრების ნიშნულისთვის.
იგი აჩვენებს კომპილატორს, რომ შესაბამისი lambda არ შეუძლია განახორციელოს non-local return (ანუ, გამოიყენოს ბრძანება return გარეთ ფუნქციის გასვლისთვის). თუმცა, lambda კვლავ შეიძლება იყოს inlined ადგილზე, სადაც ის გამოიძახება (inlined).
მაგალითი:
// ჩვეულებრივი inline ფუნქცია, non-local return-ით
inline fun runTask(task: () -> Unit) {
task() // შესაძლებელი არის non-local return-ი from task()
println("მოვალეობა დასრულდა")
}
// inline ფუნქცია crossinline პარამეტრით
inline fun runSafeTask(crossinline task: () -> Unit) {
// try-finally ბლოკი მაგალითისთვის, სადაც საჭიროა crossinline
try {
task() // არ არის დაშვებული non-local return-ი from task()
} finally {
println("სუფთავება")
}
println("უსაფრთხო სამუშაო დასრულდა")
}
fun main() {
// runTask-ის გამოყენება
runTask {
println("runTask-ის ლამბდა შიგნით")
return // დაშვებულია: non-local return-ი main()-დან
}
// "მოვალეობა დასრულდა" არ შესრულდება
// runSafeTask-ის გამოყენება
runSafeTask {
println("runSafeTask-ის ლამბდა შიგნით")
// return // სავალდებულო შეცდომა: non-local return-ი აკრძალულია
}
println("უსაფრთხო სამუშაოს შემდეგ") // ეს პრინტი შესრულდება
}
როდის არის ეს სასარგებლო:
- როდესაც გსურთ უზრუნველყოთ, რომ
crossinlineლამბდის შემდეგ კოდი შესრულდება (მაგალითად,try-finallyბლოკებში). - როდესაც ლამბდი გადაეცემა სხვა ფუნქციას, რომელიც შესაძლოა არ იყოს inline, და გსურთ თავიდან აიცილოთ non-local return, რომელიც შეიძლება დაარღვიოს შესრულების ნაკადი.