Dart
Enum ve pattern
Pattern matching ile enum öğrenirsin.
Pattern matching
Dart 3'ün pattern matching (desen eşleştirme) özelliği enum ile çok güçlüdür. switch artık değer döndüren bir ifade olarak da yazılabilir; bu sayede break gerekmez. Her case bir desenle eşleştirir ve bir değer üretir. Sonuç doğrudan değişkene atanır.
Örnek: final label = switch (s) { Status.active => "çalışıyor", Status.idle => "bekliyor", Status.maintenance => "bakımda" };. Ok (=>) sağındaki ifade case'in sonucudur. Virgülle ayrılır, break yoktur. Tüm sabitler ele alınınca default gerekmez; bu özellikle kısa ve güvenli kod üretir.
Uygulama Sıra sende: switch expression
Approval adında pending, approve, reject sabitlerini içeren bir enum tanımla. main içinde final a = Approval.approve; ata ve bir switch expression ile Approval.approve için "onaylandı" döndür. Sonucu print ile yazdır. Tüm sabitleri ele al.
Örnek çözümü göster
enum Approval { pending, approve, reject }
void main() {
final a = Approval.approve;
final label = switch (a) {
Approval.pending => "bekleniyor",
Approval.approve => "onaylandı",
Approval.reject => "reddedildi",
};
print(label);
}
Destructuring
Pattern matching sadece enum sabitini yakalamaz; enhanced enum'un alanlarını da ayrıştırabilir (destructure). Bir case içinde sabitin adını ve parantez içinde alan adlarını yazarak alana doğrudan erişirsin. case Heat high(: final degrees): gibi. Bu, özellikle çok alanlı enhanced enum'larda güçlüdür.
Dahası, alt çizgi _ ile "diğer tüm durumlar" desenini yakalarsın; _ => "bilinmiyor". Bu, default'a benzer ama daha kısadır. Yine de _ kullanırsan yeni sabit eklendiğinde derleyici uyarmaz; bu yüzden tüm sabitleri açıkça yazmak genellikle daha güvenlidir. Desen eşleştirme, switch expression ve enhanced enum üçlüsü Dart 3'ün güçlü araçlarıdır.
Kendini test et
-
switch expression ok
final label = switch (s) { Status.active ____ "çalışıyor", Status.idle => "bekliyor" };
Cevabı göster
final label = switch (s) { Status.active => "çalışıyor", Status.idle => "bekliyor" };
-
switch expression hangi durumda daha yararlı?
final s = switch (x) { A => 1, B => 2 };
- default zorunludur
- break zorunludur
- Her case bir değer döndürür
- if yerine kullanılamaz
Cevabı göster
Her case bir değer döndürür — switch expression değer döndürür, break gerekmez.
-
Pattern eşleştir
- pattern
- desen
- =>
- değer üretir
- _
- diğer durumlar
- destructure
- alanları açar
Sıradaki ders: Özet - Enum'lar