İçeriğe geç

Swift Generics Type Constraints and Where Clauses kullanımı

swift

Merhabalar bu yazımda Swift programlama dilinin modern programlama anlayışında POP programlama ve OOP programlama anlayışlarına büyük katkılar sağlayan Generics kullanımına bir kaç güzel örnek vereceğim.

Generics ile ilgili yazılar yazmıştım ancak genericsin ileri seviye kullanımına örnek vermedim. Bu yazımda Generics’i Advence seviyede nasıl kullanırız bunun örneğini vermiş olacağım.

Generics örnek olarak bir fonksiyon yazdığımızı düşünelim bu fonksiyon Integer değişkenler alır ve bunlar üzerinde işlemler yapar şeklinde yazarsak sadece Integer’la işlem yapan fonksiyon yazmış oluruz. Ancak Generics belirsiz değişken tipiyle fonksiyon,sınıf,structların tipi belli değildir. Siz içerisine ne koyarsanız o şekli alır. Buda büyük kolaylıklar sağlar. Ayrı ayrı fonksiyonlar sınıflar yazmanıza gerek kalmaz.

Basit bir generics örneği gördüğümüz gibi tür farketmeden fonksiyon kullanılmakta.

Aşağıdaki örneğimde FİFO(First in first out) yapısına uygun veri yapısı tipi olan Kuyruk yapısını generics ile tüm türlere uygun şekilde yazmış olduk.

Daha sonra generics türü belirlerken Protokolleri kullanabiliyoruz buda generics’i ileri seviyeye çıkarıyor. Bazı durumlarda türlerin uyuşmazlığı vb durumlarda Swift dilinde bulunan protokoller kullanılmakta.

Aşağıdaki verdiğim örnekte dizinin türü farketmeksizin ortadaki değeri döndüren fonksiyon yazmış olduk.

Burada T:Comparable belirtmek zorundayız aksi takdirde derleyici uyarı verecektir. Girilen türün sıralanabilir,kıyaslanabilir olduğunu belirtmiş oluyoruz.

Bu örneğimde ise Eşitliği kontrol edilebilir yani Equatable olduğunu bildirdik.

Bu yazdığımız ekler birer protokoldürler. Bizde kendi protokollerimizi yazıp deneyelim.

Yazdığım bu örnekte protokol için overloading yapılmış + fonksiyonunu Int sınıfına extend edip generics olarak kullanıyoruz.

Aşağıdaki vereceğim örnekte ise tüm bunların hepsini bir arada kullanacağız. Yine bir veri yapısı türü olan Stack yapısını generics ile gerçekleyeceğim. Kuyruk yapısından farkı LİFO(Last in first out) yapısında olması. Programlamada karşımıza sık çıkmakta İOS sayfalar arası geçişlerde ViewController’leri stack yapısında oluşturur ve geri gittiğinizde pop ile stack’den sayfa çekilmiş olur.

Container adlı bir protokolümüz var Stack yapısına uygun bir şekilde. Generics işlemimiz için kullanacağız.

Stack structumuzu yazdık aşağıda 2 tane stack oluşturalım.

Generics üzerinden Where Clauses mantığını anlamak için Generics bir karşılaştırma fonksiyonu yazalım bu stackler aynı mı değil mi bize Bool değer döndürsün.

c1 ve c2 tipleri burda aynı protokolu kullanan tipler eğer bunların type’leri yanı String veya Int gibi. eşit ise karşılaştırılabilir olduğunu belirtiyoruz. 🙂

 

 

Tarih:Swift

Bu yazı yorumlara kapalı.

© 2020 Kenan Atmaca