ProgramlamaOrta seviye iOS geliştirici

Swift'te switch içinde where kullanarak pattern matching nasıl çalışır? Karmaşık desenler yazarken hangi ince noktalara dikkat edilmelidir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Swift'te switch yapısı genişletilmiş pattern matching'i destekler: belirli case'ler için şartlar eklemek üzere where kullanabilirsiniz. Bu, karmaşık iş mantığını ve filtrelemeyi gerçekleştirmeyi sağlar.

Örnek:

enum Person { case student(score: Int) case teacher(specialty: String) } let people = [Person.student(score: 95), Person.teacher(specialty: "Math"), Person.student(score: 65)] for person in people { switch person { case .student(let score) where score > 90: print("Üstün başarı ile sonuç \(score)") case .teacher(let specialty): print("Öğretmenin uzmanlık alanı: \(specialty)") default: print("Diğer durum") } }

where kullanımı okunabilirliği artırır ve kod tekrarını önler, ancak aşırı karmaşık koşullar desteklemeyi zorlaştırabilir ve ilişkilendirilmiş değerlerle yapılan pattern matching, case'lerin sıralaması üzerinde net bir kontrol gerektirir.

Kandırmaca soru.

Soru: "Switch içindeki where ile pattern matching yaparken her case'de benzersiz isimlere sahip değişkenler tanımlamak zorunlu mu?"

Cevap: Hayır, ama bu kafa karışıklığını önlemek için tavsiye edilir. Farklı case'lerde aynı değişken adlarını kullanmak, bağlamın ilgili case ile sınırlı kalmasını sağlar, ancak aynı isim okunabilirliği ve kod bakımını zorlaştırabilir.

Örnek:

switch value { case .status(let code) where code == 200: print("OK") case .status(let code) where code == 404: print("Bulunamadı")

Konuyla ilgili bilgi eksikliğinden kaynaklanan gerçek hata örnekleri.


Hikaye 1

Bir bankacılık uygulamasında, birden fazla where koşulu ile durum analizi bölümü vardı. Break'in atlanması ve case sırasının yanlış olması nedeniyle, belirli bir durum işlenmedi ve kullanıcılar işlemlerin tam durumunu göremedi. Hata, yalnızca saha testlerinde keşfedildi.


Hikaye 2

Yetkilendirme sisteminde, geliştirici farklı case'lerde aynı değişken adlarını kullandı. Bu, karışıklığa ve bir hataya yol açtı: ikinci durumda farklı bir case'de tanımlanan bir değişken kullanılmaya çalışıldı. Derleme başarılı oldu ancak bazı senaryolarda yanlış çalıştı.


Hikaye 3

Where ile karmaşık pattern matching'de, default'un ilişkili enum'un bazı kombinasyonlarını işleyemeyeceği göz önünde bulundurulmadı, bu da uygulamanın pattern matching failed hatasıyla çökmesine neden oldu. Problem, gelecekte yeni veri türlerinin entegrasyonu sırasında ancak fark edildi.