Closure Temelleri
Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 38 / 56.
Closure, başka yerlere aktarabileceğiniz ve daha sonra çağırabileceğiniz bağımsız bir kod bloğudur. Tam sözdizimi, parametre ve dönüş türlerini açıkça belirtir:
let double = { (n: Int) -> Int in
return n * 2
}
print(double(5)) // 10Swift, bağlam net olduğunda türleri çıkarabilir, bu nedenle nadiren uzun formu yazarsınız. map, filter vb. içinde, daha kısa olan kısaltma standarttır:
let nums = [1, 2, 3, 4]
let doubled = nums.map { n in n * 2 }
let alsoDoubled = nums.map { $0 * 2 } // en kısası, $0 ilk argümandırClosure'lar değerlerdir; onları değişkenlerde saklayabilir, fonksiyonlardan döndürebilir ve argüman olarak geçirebilirsiniz. map fonksiyonunun çalışmasının asıl sebebi budur.
Görev
Kolayİki satırlık girdi okuyun:
- Bir tam sayı
x - Virgülle ayrılmış tam sayılardan oluşan bir liste
Her biri (Int) -> Int tipinde olan üç closure tanımlayın:
addX, argümanınaxeklersquare, argümanın karesini döndürürnegate, argümanın negatifini döndürür
Her bir closure'ı map kullanarak listenin her elemanına uygulayın. Sonuçları , ile birleştirerek her closure için bir satır olacak şekilde üç satır yazdırın:
addX: ...
square: ...
negate: ...1. satırdaki 10 girdisi ve 2. satırdaki 1,2,3 girdisi için çıktı şöyledir:
addX: 11,12,13
square: 1,4,9
negate: -1,-2,-3Kopya kağıdı
Bir closure, saklanabilen ve aktarılabilen, kendi kendine yeten bir kod bloğudur. Tam sözdizimi:
let double = { (n: Int) -> Int in
return n * 2
}Closure'lar değişkenlerde saklanabilir ve argüman olarak aktarılabilir (örneğin map fonksiyonuna). Swift, bağlam içindeki türleri çıkararak kısa yazıma olanak tanır:
let nums = [1, 2, 3, 4]
let doubled = nums.map { n in n * 2 }
let alsoDoubled = nums.map { $0 * 2 } // $0 ilk argümandırKendin dene
let x = Int(readLine()!)!
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: üç tane (Int) -> Int closure tanımlayın ve nums'ı her biri üzerinden map edin
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Stringler Derinlemesine
Sayma ve İndekslerBüyük-Küçük Harf ve KırpmaStringlerde AramaBölme ve BirleştirmeAlt Stringleri DeğiştirmeÖzet - Kullanıcı Adı Kontrolü4Kümeler
Küme OluşturmaBirleşim ve KesişimFark ve Simetrik FarkAlt Küme ve Üst KümeÖzet - Etiket Filtresi7Proje - Alışkanlık Takibi
Projeye Genel BakışTamamlandı Olarak İşaretle10Proje - Quiz Motoru
Projeye Genel BakışSoruları Sorma2Aralıklar ve Adımlar
Kapalı ve Yarı AçıkStride (Adım)Aralık MetotlarıSwitch İçinde AralıklarÖzet - Takvim Izgarası5Yüksek Mertebeden Fonksiyonlar Bölüm 1
MapFilterReduceMap, filter, reduce zincirlemeÖzet - Kelime İstatistikleri8Closure'lar
Closure TemelleriTrailing Closure'larDeğer YakalamaClosure DöndürmeÖzel Yüksek Seviyeli FonksiyonlarÖzet - Pipeline Oluşturucu