Swift Programlama Dili ve Protokoller


Merhaba arkadaşlar bugün Swift dilinde protokollerin ne anlama geldiğini ve ne işe yaradıklarını elimden geldiğince örneklerle açıklamaya çalışacağım. Öncelikle Swift object oriented ve protocol oriented bir programlama dilidir. Object oriented mantığı hakkında internette çok güzel yazılar bulabilirsiniz. Kısaca mantığı programda oluşturduğunuz her yapı birer objedir. Yani insan isminde bir sınıfınız olduğunu düşünün bu insan classında Ahmet,Mehmet,Ayşe hepsi ayrı birer objedir. Bu objelerin özellikleri göz rengi,saç rengi,boyu(attributes) ve yetenekleri yürümek,koşmak,yüzmek (functions) vardır.
Daha önceden programlamaya uğraştıysanız interface'ler hakkında bilgi sahibisinizdir ama uğraşmadıysanız da açıklaması burada.
Interfaceler kullanıcı ile program arasında bir anlaşma gibidir. Siz interface tanımlayıp onu bir classta implement ettiğiniz takdirde interface içinde yer alan tüm metodları boş da olsa tanımlamalısınız. Swiftte ise protokollerin yaptığı iş hemen hemen bu. Aşağıdaki kod parçacığı bir protokolün tanımlamasını gösteriyor. Bu protokol bir arabaya ait her arabada olduğu gibi bu arabanın çalışma ve durma metodu ve ayrıca çalışıp çalışmadığını kontrol eden bir değişkeni var. Dediğim gibi her bir arabanın çalışma ve durma özelliğini ayrı arabalarda tanımlamak bize yük olur. Ama protokol kullanıp alt classları onu implement etmek zorunda bırakırsak her biri kendine göre bu işi yapabilir. Kimi araba 3 saniyede çalışırken kimisi 5 saniyede çalışır ama sonuç olarak hepsinin yaptığı iş çalışmaktır.

Mutating sözcüğü aklınızı karıştırmasın. Bu sadece altta struct tipinde bir yapı tanımladığımızda fonksiyonun içeriğini değiştirebilmemiz için kullandığımız bir sözcük.


1
2
3
4
5
protocol Vehicle {
    var isRunning:Bool { get set }
    mutating func start()
    mutating func turnOff()
                 }

Şimdi araba protokolüne uyacak bir spor araba yapısı oluşturuyoruz. (:) ona uyduğumuzu göstermek için kullanılır.  Burada gördüğünüz gibi protokolde tanımladığımız start ve turnoff fonksiyonlarını bu protokole uyan spor araba yapısında tanımlamak durumunda kaldık. Yani protokolle olan anlaşmamıza sadık kaldık. Tanımlamadığınız takdirde program çalışmayacak hata verecektir. Gördüğünüz gibi mutating sözcüğünü struct yapısı içinde değişiklik yapabilmek için kullandık.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
struct SportsCar:Vehicle {

    var isRunning: Bool = false
    
    mutating func start() {
        if isRunning {
            print("Already started")
        } else {
            isRunning = true
            print("Vroom")
        }
    }
    
    mutating func turnOff(){
        if isRunning {
            isRunning = false
            print("Crickets")
        }
        else {
            print("Already dead!")
        }
    }

}




Burada ise araba protokolüne uyan bir kamyon sınıfı tanımladık. Sınıf yapısı zaten referans tipinde olduğu için tipi mutating'dir. O nedenle mutating sözcüğünü burada kullanmadık.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class SemiTruck : Vehicle {
    
    var isRunning: Bool = false
    
    func start() {
        if isRunning {
            print("Already started")
        } else {
            isRunning = true
            print("Rumble")
        }
    }
    
    func turnOff() {
        if isRunning {
            isRunning = false
            print("put put sound")
        } else {
            print("Already shut down")
        }
        
    }

}



Gördüğünüz üzere protokoller alt sınıflarımız ile aramızda yaptığımız bir anlaşma ve bu anlaşmaya göre protokol içinde tanımlanan boş fonksiyonları alt sınıflar kendi içlerinde tanımlamak zorundalar aksi takdirde hata alacaksınız.

Daha fazla soru ve detaylar için ulaşabilirsiniz. Hepinize bol kodlu günler :)

Yorumlar

  1. Slots - Casino - Mapyro
    Play 안양 출장안마 slots online for 김제 출장안마 real money with no 군산 출장샵 deposit and no deposit 삼척 출장마사지 needed! ✓ Get started 충청남도 출장마사지 today! ⭐ Win real money with the best slots reviews ✓ No deposit

    YanıtlaSil

Yorum Gönder

Bu blogdaki popüler yayınlar

Video Boyutu Hesaplama

Linux Kullanıcı Ekleme Silme ve Parola Belirleme

Swift Programlama Dili ve Generic Yapısı

Hadoop Kurulumu

Linux Dosya İzinleri

Linux Önemli Dizinler

Temel Linux Komutları

Chroma Subsampling (Renk Alt Örneklemesi) veya 4:2:2 4:2:0