- Published on
7.1 Swiftda Closures | Swift asoslari
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Closures nima?
Closure – bu funksiyaga o‘xshash kod bo‘lagi, uni o‘zgaruvchiga saqlash yoki boshqa funksiyaga uzatish mumkin.
Oddiy qilib aytganda:
- Function – bu ismli (nomi bor) kod bo‘lagi.
- Closure – bu ismsiz (nomi yo‘q) kod bo‘lagi.
Shuning uchun closure’ni ko‘pincha "anonymous function" (nomsiz funksiya) deb ham atashadi.
Oddiy misol
let sayHello = {
print("Hello from closure!")
}
sayHello() // Output: Hello from closure!
Bu yerda:
sayHellonomli o‘zgaruvchiga closure yozib qo‘ydik.- Keyin uni chaqirib ishlatdik.
Closure parametrlar bilan
Closure ham funksiya kabi parametr qabul qila oladi va qiymat qaytara oladi.
let addNumbers: (Int, Int) -> Int = { (a, b) in
return a + b
}
print(addNumbers(3, 5)) // Output: 8
Bu yerda:
(Int, Int) -> Int– closure ikkitaIntqabul qiladi vaIntqaytaradi.{ (a, b) in ... }–inkalit so‘zi parametrlardan keyin ishlatiladi.
Funksiyaga closure uzatish
Closures ko‘pincha funksiyaga parametr sifatida uzatiladi.
func doMath(a: Int, b: Int, operation: (Int, Int) -> Int) -> Int {
return operation(a, b)
}
let result = doMath(a: 10, b: 5, operation: { (x, y) in
return x - y
})
print(result) // Output: 5
Bu yerda:
operationnomli parametr closure bo‘ldi.- Biz unga
{ (x, y) in return x - y }closure’ni uzatdik.
Trailing Closure Syntax
Agar closure oxirgi parametr bo‘lsa, uni qisqa yozish mumkin.
let result = doMath(a: 10, b: 5) { (x, y) in
x * y
}
print(result) // Output: 50
Bu yozuv Swift’da juda ko‘p ishlatiladi, chunki kod chiroyli va tushunarli ko‘rinadi.
Amaliy misol: Array bilan ishlash
Closures eng ko‘p collectionlar (Array) bilan ishlatiladi: map, filter, sorted.
Map
let numbers = [1, 2, 3, 4, 5]
let doubled = numbers.map { $0 * 2 }
print(doubled) // [2, 4, 6, 8, 10]
Filter
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // [2, 4]
Sorted
let sortedDesc = numbers.sorted { $0 > $1 }
print(sortedDesc) // [5, 4, 3, 2, 1]
Bu yerda $0, $1 – closure parametrlarini qisqa yozish usuli.
Xulosa
- Closure – bu ismsiz funksiya.
- Uni o‘zgaruvchiga saqlash, funksiyaga uzatish va natija qaytarish mumkin.
- Swift’da array metodlari (
map,filter,sorted) closures bilan juda ko‘p ishlatiladi. Trailing closure syntax– Swift kodini qisqa va chiroyli yozishga yordam beradi.
Closures Swift’da juda muhim mavzu, chunki ularni SwiftUI’da deyarli har bir joyda ko‘rasiz.
Topshiriqlar
1-topshiriq.
Oddiy closuregreet nomli closure yarating.
U "Hello, Swift!" matnini chop etsin.
Keyin uni chaqirib ishga tushiring.
2-topshiriq.
Parametrli closuremultiply nomli closure yarating.
U ikkita Int sonni qabul qilib, ularning ko‘paytmasini qaytarsin.
Masalan: multiply(3, 4) → 12.
3-topshiriq.
Funksiyaga closure uzatishperformOperation(a:b:operation:) nomli funksiya yozing.
U ikkita son va closure qabul qilsin.
Closure orqali sonlarni qo‘shish yoki ayirishni bajaring.
4-topshiriq.
Trailing closure sintaksis
Yuqoridagi performOperation funksiyasini trailing closure uslubida chaqiring.
Masalan: performOperation(a:5, b:2) { x, y in x - y }.
5-topshiriq.
Array bilan ishlash[2, 5, 8, 11, 14] massivdan foydalaning.
Closures yordamida:
- Faqat juft sonlarni filtrlang.
- Har birini 2 baravar oshiring (
map). - Natijani kamayish tartibida tartiblang (
sorted).