Menu
Coddy logo textTech

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))                  // 10

Swift, 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ır

Closure'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.

challenge icon

Görev

Kolay

İki satırlık girdi okuyun:

  1. Bir tam sayı x
  2. Virgülle ayrılmış tam sayılardan oluşan bir liste

Her biri (Int) -> Int tipinde olan üç closure tanımlayın:

  • addX, argümanına x ekler
  • square, argümanın karesini döndürür
  • negate, 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,-3

Kopya 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ır

Kendin 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
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