Menu
Coddy logo textTech

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())                    // 3

Her 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())                       // 2

Yakalama, 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.

challenge icon

Görev

Orta

Küçü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
14

Kendin 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
quiz iconKendini test et

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

Kendi başına pratik yap: Swift playground