Published on

7.1 Swiftda Closures | Swift asoslari

Authors

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:

  • sayHello nomli 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 ikkita Int qabul qiladi va Int qaytaradi.
  • { (a, b) in ... }in kalit 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:

  • operation nomli 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 closure
greet nomli closure yarating.
U "Hello, Swift!" matnini chop etsin.
Keyin uni chaqirib ishga tushiring.

2-topshiriq.

Parametrli closure
multiply nomli closure yarating.
U ikkita Int sonni qabul qilib, ularning ko‘paytmasini qaytarsin.
Masalan: multiply(3, 4)12.

3-topshiriq.

Funksiyaga closure uzatish
performOperation(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).