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ğu sırada kapsamda (scope) olan değişkenleri hatırlar. Closure gövdesi, çevreleyen fonksiyon döndükten sonra bile bu değişkenleri okuyabilir ve hatta daha sonra değiştirebilir. Buna yakalama (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 bir makeCounter çağrısı size yepyeni bir count verir, bu nedenle iki sayaç asla durum paylaşmaz:

let a = makeCounter()
let b = makeCounter()
print(a())                       // 1
print(b())                       // 1
print(a())                       // 2

Yakalama (capturing), closure'ları düz fonksiyonlardan daha güçlü kılan şeydir: yanlarında durum (state) taşırlar. Aynı numarayı JavaScript, Python ve diğer pek çok dilde göreceksiniz.

challenge icon

Görev

Orta

Küçük bir sayaç fabrikası oluşturun.

() -> Int tipinde bir closure döndüren makeCounter(start: Int, step: Int) fonksiyonunu tanımlayın. Closure'a yapılan her çağrı bir sonraki değeri döndürür: ilk çağrı start değerini, bir sonraki start + step değerini, ondan sonraki 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 değerlerini kullanarak bir sayaç oluşturun, ardından bu sayacı 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()!)!

// YAPILACAK: Mevcut değeri yakalayan makeCounter(start:step:) -> () -> Int fonksiyonunu oluşturun
// ardından bunu n kez çağırın ve her sonucu yazdırın
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