Değer Yakalama
Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 40 / 56.
Bir closure, oluşturulduğunda kapsamda olan değişkenleri hatırlar. Closure gövdesi, çevreleyen fonksiyon döndükten sonra bile bu değişkenleri daha sonra okuyabilir ve hatta değiştirebilir. Buna capturing denir.
func makeCounter() -> () -> Int {
var count = 0
return {
count += 1
return count
}
}
let next = makeCounter()
print(next()) // 1
print(next()) // 2
print(next()) // 3Her makeCounter çağrısı sana yepyeni bir count verir; bu nedenle iki sayaç durumu asla paylaşmaz:
let a = makeCounter()
let b = makeCounter()
print(a()) // 1
print(b()) // 1
print(a()) // 2Yakalama, closure’ları sıradan işlevlerden daha güçlü kılan şeydir: durumlarını beraberlerinde taşırlar. Aynı tekniği JavaScript, Python ve diğer birçok dilde göreceksin.
Görev
OrtaKüçük bir sayaç fabrikası oluşturun.
makeCounter(start: Int, step: Int) adlı, () -> Int türünde bir closure döndüren bir işlev tanımlayın. Closure'a yapılan her çağrı bir sonraki değeri döndürür: ilk çağrı start, sonraki çağrı start + step, sonraki çağrı start + 2*step değerini döndürür ve bu şekilde devam eder.
Girdiden üç tam sayı okuyun: start, step ve n. start ve step ile bir sayaç oluşturun, ardından bunu n kez çağırın ve her sonucu kendi satırında yazdırın.
5 / 3 / 4 girdisi için çıktı şöyledir:
5
8
11
14Kendin dene
let start = Int(readLine()!)!
let step = Int(readLine()!)!
let n = Int(readLine()!)!
// TODO: makeCounter(start:step:) -> () -> Int çalışan değeri yakalayan
// sonra onu n kez çağır ve her sonucu yazdır
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 İstatistikleriKendi başına pratik yap: Swift playground