Swift Programlama Dili ve Protokoller
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 :)
Slots - Casino - Mapyro
YanıtlaSilPlay 안양 출장안마 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