Menu
Coddy logo textTech

Closure Döndürme

Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 41 / 56.

makeCounter'ın bir closure döndürdüğünü gördünüz. Aynı yöntem, yapılandırılabilir davranışlar oluşturmanıza olanak tanır: parametreleri bir kez alın ve onları defalarca kullanan bir fonksiyonu geri alın.

func multiplier(_ k: Int) -> (Int) -> Int {
    return { n in n * k }
}

let triple = multiplier(3)
let tenfold = multiplier(10)
print(triple(4))                  // 12
print(tenfold(4))                 // 40

Döndürülen closure k değişkenini yakalar, bu nedenle her bir multiplier(...) çağrısı kendi k değişkenine sahip yepyeni bir closure üretir.

Bu desen, Swift'teki "strateji" kodunun temelidir: bir yapılandırma alan ve bir closure döndüren bir fonksiyon yazın, ardından closure'ı map, filter, sorted(by:) fonksiyonlarına veya fonksiyon biçimli bir değerin beklendiği başka herhangi bir yere geçirin.

challenge icon

Görev

Orta

İki closure fabrikası oluşturun:

  • greaterThan(_ k: Int) -> (Int) -> Bool: argümanı k değerinden kesinlikle büyük olduğunda true dönen bir yüklem (predicate) döndürür
  • scaleBy(_ k: Int) -> (Int) -> Int: argümanını k ile çarpan bir fonksiyon döndürür

Üç satır okuyun:

  1. Bir tam sayı threshold
  2. Bir tam sayı scale
  3. Virgülle ayrılmış tam sayılardan oluşan bir liste, nums

Üç satır yazdırın:

  1. Eşik değerinin üzerindeki sayılar (greaterThan closure'ı ile filtreleyin), , ile birleştirilmiş
  2. Aynı sayılar, ölçeklendirilmiş (scaleBy ile mapleyin), , ile birleştirilmiş
  3. Kaç tanesinin geçtiği

5 / 3 / 2,7,3,8,9 girişi için çıktı şöyledir:

7,8,9
21,24,27
3

Kendin dene

let threshold = Int(readLine()!)!
let scale = Int(readLine()!)!
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }

// YAPILACAK: greaterThan, scaleBy; önce filtrele sonra eşle; birleştirilmiş halini yazdır ve say
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