Swift: Generic
Swift programlama dilinde Generic yapılar sayesinde farklı değerler ile işlemler yapabilirsiniz.
Merhaba TurkishKit okuyucuları! ✋🏼 Bir uygulama yazarken şüphesiz türlü türlü aksiyonlar almanız gerekecek. Bazı aksiyonlar birbirlerinden sadece kullandıkları değer türlerine göre değişiklik gösterebilirler. Örneğin, bir dizi içerisinde olmasını varsaydığınız bir değerin (“a”, 1.2, 4, true, …) o dizinin kaçıncı elemanı olduğunu anlamak istiyorsunuz. Burada değerlerin türlerine göre ayrı ayrı işlemler yapmak saçma olacaktır. İşte bunu önlemek için Generic yapılar kullanmamız gerekiyor. Hazırsanız hiç vakit kaybetmeden başlayalım! 🦾
Yazı Önerisi 🤟🚀
Swift programlama dilinde karşılaşacağınız hataların çözümlerini bulabileceğiniz, pratik ipuçları ile kodlarınıza renk katacak yazıların bulunduğu yeni serimizi keşfedin.
Generic Nedir?
Her şeyden önce Generic yapıların tam olarak ne olduklarını öğrenelim. Generic yapılar, değerin veya değerlerin türünden bağımsız olarak işlem yapmamızı sağlayan yapılardır.
Bu yapılar sayesinde benzer işlemleri tek bir işlem haline getirmek mümkündür.
Şunu unutmamak gerekiyor ki Generic yapılar ile bütün işlemleri yapmak mümkün değildir, çünkü Generic yapılar sadece “genel” işlemleri yapabilirler.
Kodlama
Generic yapıları daha iyi anlamak için makalenin başında bahsettiğimiz örneği yapmaya başlayalım. İlk önce bu örneği Generic olmadan yapalım ki aradaki farkı daha iyi anlayalım. 😉
linearSearch
adında yeni bir fonksiyon oluşturalım.
func linearSearch(_ array: [String], letter: String) -> Int? {
for (index, element) in array.enumarated() {
if element == letter {
return index
}
} return nil
}
Sonrasında fonksiyonu bu şekilde çağıralım.
linearSearch(["a", "b", "c", "d", "e", "f", "g"], letter: "c")
Fonksiyonda hiç bir sorun yok, ama bu fonksiyonu aşağıdaki gibi çağırsaydık hata alırdık.
linearSearch([1, 2, 3, 4, 5, 6, 7], letter: 2)
Bunun sebebi tabii ki de fonksiyonun parametre türleri: “array” parametresi [String]
ve “letter” parametresi ise String
türünden. Bu yüzden de Int
türünden değerleri yazınca hata alıyoruz. Hatırlayacaksanız burada biz istediğimiz türden (Int
, Double
, Bool
, CGFloat
, …) değerler yazmak istiyorduk. İşte bunun için Generic kullanacağız!
Bunu yapmak için ilk önce fonksiyon adının yanına <T: Comparable>
yazmamız gerekiyor. Değerler arasında karşılaştırma yapmak için “Comparable” protokolünü kullanıyoruz. “T” yerine başka bir şey de yazabiliriz, ama genel olarak “T” kullanıldığı için sizin de “T” yazmanız kodunuzun okunabilirliğini arttıracaktır.
Not: “Comparable” protokolü ile alakalı daha fazla bilgi sahibi olmak için bu yazıyı okuyabilirsiniz.
func linearSearch<T: Comparable>(_ array: [String], letter: String) -> Int? {
for (index, element) in array.enumerated() {
if element == letter {
return index
}
}
return nil
}
Sonrasında parametrelerin değerini de “T” olarak değiştirebiliriz.
func linearSearch<T: Comparable>(_ array: [T], letter: T) -> Int? {
for (index, element) in array.enumerated() {
if element == letter {
return index
}
}
return nil
}
Artık istediğimiz türden değerleri bu fonksiyonda kullanabileceğiz!
Bir makalemizin daha sonuna geldik. Bu makalemizde Generic yapıların ne olduğunu ve nasıl kullanıldığını öğrendik. Keyifli kodlamalar! 🧠