0Pricing
Swift Academy · Ders

Protokol Tabanlı Soyutlamalar

Somut türlere değil, protokollere bağımlı olun.

Protokol Tabanlı Soyutlamalar, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.

Protokol Tabanlı Soyutlamalar

Somut bir tür yerine bir protokol enjekte etmek, uygulamaları serbestçe değiştirmenizi sağlar. Kullanıcı yalnızca davranışa bağımlıdır; sınıfa değil.

Protokol Tanımlama

Yeteneği bir protokol olarak tanımlayınız. Protokole uyan herhangi bir tür bağımlılık olarak sağlanabilir.

protocol Logging {
    func log(_ message: String)
}
print("Protocol describes behavior, not a concrete class.")

Somut Bir Türü Uyumlu Hale Getirme

Gerçek bir uygulama protokole uyar. Bu, üretimde kullanılan bağımlılıktır.

protocol Logging { func log(_ m: String) }
struct ConsoleLogger: Logging {
    func log(_ m: String) { print("LOG: \(m)") }
}
ConsoleLogger().log("ready")

Protokole Bağımlı Olma

Kullanıcının özellik türü protokol olduğundan, protokole uyan herhangi bir değeri kabul eder.

protocol Logging { func log(_ m: String) }
struct ConsoleLogger: Logging { func log(_ m: String) { print(m) } }
struct Service {
    let logger: Logging // protocol, not ConsoleLogger
    func run() { logger.log("running") }
}
Service(logger: ConsoleLogger()).run()

Uygulamaları Değiştirme

Tür bir protokol olduğundan, kullanıcıya dokunmadan protokole uyan farklı bir uygulama geçirebilirsiniz.

protocol Logging { func log(_ m: String) }
struct Loud: Logging { func log(_ m: String) { print(m.uppercased()) } }
struct Quiet: Logging { func log(_ m: String) {} }
struct Service { let logger: Logging; func run() { logger.log("hi") } }
Service(logger: Loud()).run()
Service(logger: Quiet()).run()

Arayüzlere Göre Programlama

Bu, "somut uygulamalara değil, soyutlamalara bağımlı olma" ilkesidir. Üst düzey kod, alt düzey ayrıntılardan yalıtılır.

protocol Storage { func save(_ v: Int) }
struct MemoryStore: Storage { func save(_ v: Int) { print("kept \(v)") } }
struct Manager { let store: Storage; func add() { store.save(1) } }
Manager(store: MemoryStore()).add()

Birden Çok Uyumlu Tür

Birden fazla tür aynı protokole uyabilir; her biri ağ, disk veya bellek gibi farklı bir bağlama uygun olabilir.

protocol Source { func value() -> Int }
struct Fixed: Source { func value() -> Int { 10 } }
struct Doubler: Source { func value() -> Int { 20 } }
func use(_ s: Source) { print(s.value()) }
use(Fixed())
use(Doubler())

İlişkili Davranışlara Sahip Protokoller

Protokoller, bağımlılık için açık bir sözleşme oluşturan birden çok yöntem tanımlayabilir.

protocol Cache {
    func get(_ key: String) -> Int?
    func set(_ key: String, _ v: Int)
}
struct Dict: Cache {
    var store: [String: Int] = [:]
    func get(_ k: String) -> Int? { store[k] }
    mutating func set(_ k: String, _ v: Int) { store[k] = v }
}
var c = Dict(); c.set("a", 1)
print(c.get("a") ?? -1)

Genel Tür Kısıtlamaları

Ayrıca protokolle kısıtlanmış genel bir parametre aracılığıyla enjeksiyon yapabilir ve varoluşsal ek yükten kaçınabilirsiniz.

protocol Greeter { func greet() -> String }
struct English: Greeter { func greet() -> String { "Hello" } }
struct Welcome<G: Greeter> {
    let greeter: G
    func show() { print(greeter.greet()) }
}
Welcome(greeter: English()).show()

Kararlı Sözleşmeler

Protokol kararlı kaldığı sürece uygulamalar, kullanıcıları bozmadan kendi içlerinde değişebilir.

protocol Formatter { func format(_ n: Int) -> String }
struct Plain: Formatter { func format(_ n: Int) -> String { "\(n)" } }
struct Padded: Formatter { func format(_ n: Int) -> String { String(format: "%03d", n) } }
func render(_ f: Formatter) { print(f.format(7)) }
render(Plain())
render(Padded())

Taklit Etmeye Hazırlık

En önemlisi, protokoller sınamaların gerçek uygulamanın yerine sahte bir uyumlu tür sağlamasına olanak tanır. Bir sonraki dersin konusu budur.

protocol Network { func fetch() -> String }
struct Real: Network { func fetch() -> String { "server data" } }
struct VM { let net: Network; func load() { print(net.fetch()) } }
VM(net: Real()).load()

Hızlı Denetim

Somut bir sınıf yerine neden bir protokol türü enjekte edilir?

Özet

Bir protokol enjekte etmek somut türü soyutlar; böylece protokole uyan herhangi bir türün yerine konulabilmesini sağlar. Bu yaklaşım "soyutlamalara bağımlı olma" ilkesini izler ve alternatif uygulamaların, özellikle de sınama amaçlı sahte nesnelerin kullanılmasını mümkün kılar. Sırada: sınamalarda bağımlılıkları taklit etme.

Sıkça Sorulan Sorular

“Protokol Tabanlı Soyutlamalar” dersi ücretsiz mi?

Evet — “Protokol Tabanlı Soyutlamalar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.

“Protokol Tabanlı Soyutlamalar” dersinde ne öğreneceğim?

Somut türlere değil, protokollere bağımlı olun. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Swift Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Protokol Tabanlı Soyutlamalar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Bağımlılık Enjeksiyonu Neden Kullanılır
  2. Kurucu Enjeksiyonu
  3. Protokol Tabanlı Soyutlamalar
  4. Sınamalarda Bağımlılıkları Taklit Etme
← Swift Academy Sayfasına Dön