Pattern matching, Swift dilinin temel bir parçasıdır ve enum'ların çeşitli varyantlarını güvenli ve şık bir şekilde işlemeye olanak tanır. Bu yaklaşım, örnekle eşleştirmenin, uzun if-else zincirlerini önleyerek farklı durumları kompakt bir şekilde işlemeye olanak tanıdığı fonksiyonel dillerden gelmektedir. Swift'te enum'lar için pattern matching esas olarak switch aracılığıyla gerçekleştirilir ve burada her bir case ayrı ayrı işlenir.
Problem, tüm durumlar uygulandığında ya da varsayılan (default) seçildiğinde ortaya çıkar, bu da potansiyel olarak" göz ardı edilen" durumları gizleyebilir. Bu, enum'a yeni durumlar eklenmesi durumunda çalışma zamanı hatalarına neden olabilir.
Çözüm, switch içerisinde enum'un tüm varyantlarını açıkça döngüye almak ve varsayılanı (default) mümkünse kullanmamaktır. Bu yaklaşım, enum'un değişmesi durumunda derleyicinin işlenmemiş durumları atlamasını garanti eder.
Kod örneği:
enum NetworkStatus { case connected case disconnected case connecting } func handle(status: NetworkStatus) { switch status { case .connected: print("Ağ bağlı") case .disconnected: print("Ağ bağlantısı kesildi") case .connecting: print("Bağlanıyor...") } }
Anahtar özellikler:
1. Associated değerleri olmayan enum'lar için if case ifadeleri kullanılabilir mi?
Evet, kullanılabilir. Bu, belirli bir case'i kısa bir şekilde kontrol etmeye olanak tanır.
if case .connected = status { print("Ağ bağlı") }
2. Tüm case'ler için uygulama yapılmışsa, switch içinde varsayılan (default) uygulamak zorunlu mu?
Hayır, tüm varyantlar uygulandığında varsayılan (default) gerekli değildir. Varsayılandan kaçınmak, derleyicinin yeni case eklenmesi durumunda bildirimde bulunmasına olanak tanır.
3. Enum ile birlikte switch içinde fallthrough kullanmak mümkün mü?
Evet, mümkündür ancak son derece önerilmez, çünkü fallthrough case'in anlamını dikkate almaz ve mantık hatalarına yol açabilir.
Enum NetworkStatus'a yeni bir case .noSignal eklenmiştir, ancak mevcut switch'te varsayılan (default) vardır, bu nedenle hata ancak çalışma zamanında, durumun doğru işlenmediğinde ortaya çıkar.
Artılar:
Eksiler:
Tüm case'ler açıkça işlenmiştir. Derleyici, yeni bir case eklenmesi durumunda switch'in güncellenmesi gerektiğini hemen bildirir.
Artılar: