Swift Fonksiyonlarından: Closures { }

emre gürses
3 min readFeb 27, 2019

--

Swift öğrenirken en çok zorlanılan konuların başında Closures yapısı geliyor. O zaman bu zorlukları beraber aşmaya çalışalım mı?

Bu konuyu 3 başlıkta anlatmayı planlıyorum.

  • 1. ders’te closure yapısı nedir, nasıl kullanılır
  • 2.ders’te Swift dilinin bize verdiği bazı closure fonksiyonlarının kullanılması
  • 3.ders’te ise Closure’un biraz daha ileri konusu @escaping vb konular.

Hazırsanız 1.ders’e başlayalım!

Aslında closure dediğimiz yapı bir fonksiyondur. Fonksiyon nedir derseniz buyrun;

Tanım : Fonksiyon bir programlama dilinde bir işi yapmak için özelleşmiş kod blogudur. Bir ismi vardır, parametre alıp geriye bir değer döndürebilir. Aşağıda ismi calculateSquare olan, Int türünde ismi square olan bir parametre alıp, geriye Int türünde bir değer dönen fonksiyondur.

Closure Tanım : Closure ise ismi olmayan, parametre alıp geriye değer döndüren, bir değişkende saklanabilen, fonksiyona parametre olarak geçilebilen bir kod blogudur(fonksiyondur-metoddur). Bir çok Swift API’sinde closure kullanılır. Yukarıda yazdığımız fonksiyonu closure’a çevirmek istersek aşağıdaki gibi olacaktır.

Farkettiyseniz closure’u bir değişkene atadık. Yukarıda söylediğimiz gibi closure’lar değişkenlerde saklanabilir. Yukarıdaki closure örneğinde (values) değeri aslında tek değişken alanbir closure fonksiyonunu belirtiyor.

Şimdi sırasıyla farklı yapıdaki(parametre sayısı, dönüş tipi farklılıkları) closure örneklerini aşağıda inceleye bilirsiniz.

Aslında closure yazdıkça Swift dilinin ne kadar esnek olduğunu göreceksiniz.

  • Yukarıdaki ilk örnek olan sayHayyo closure’unun geriye değer döndürmeyeceğini Void sözcüğüyle yazabildiğimiz gibi aşağıdaki gibi de yazabilirdik.
  • Bir diğer konu parametreleri isimlendirmede kullanabileceğimiz kısaltmalardır. Her bir parametreyi sırasıyla $0, $1 şeklinde kullanabiliriz. Aşağıda yer alan 3 closure’da aynı işi yapıyor. Sadece parametre isimlendirmeleri farklı. Sizde closure kullandıkça 2. örnekteki yapıya alışacağınıza eminim. Eğer tek bir satırda işlem yapacaksak return keyword’ünü kaldırabileceğimizi aşağıdaki square3 closure’dan görebiliyoruz.

Ve son olarak, closure’u bir fonksiyona parametre olarak geçmek istersek!

Şimdiye kadar öğrendiklerimizi uygulamaktan başka bir yenilik yok. Fonksiyonumuzun son parametresini bir closure olarak ayarlıyoruz. Buradaki amaç, bir fonksiyonun bir iş yaptıktan sonra bize haber vermesi, kodumuzun daha kısa ve anlaşılır yazılması gibi bir çok güzelliği kullanmamıza imkan vermesidir. Aşağıdaki calcEvent fonksiyonumuza parametre olarak geçtiğimiz closure’u görelim. Bu fonksiyonumuzu aşağıda görüldüğü gibi 4 farklı şekilde çağırabiliriz.

Closure yapısını anlatmaya çalıştım. Bu dersin 2.sinde değer yakalama, @escaping gibi farklı konulara değineceğim. Ayrıca closure yapısının daha iyi anlaşılabilmesi için Swift dilinin bize sağladığı bazı hazır closure fonksiyonlarından oluşan bir dizi örneğin kullanımını içeren yazıma bakmanızı öneririm.

Umarım faydalı olmuştur.

Kolay Gelsin.

--

--

emre gürses

Denizbank — Intertech, Mobil Uygulama Geliştiricisi(iOS)