Enum ve pattern
- Dart kursu
- Başlangıç
- Ders 98/116
- 5 dk
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.
Başlangıç kodu
void main() {
// Approval enum'ını tanımla: pending, approve, reject
// switch expression ile her durum için etiket üret ve yazdır
}Örnek çözüm
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);
}Beklenen çıktı
onaylandı
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.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 switch expression ok
final label = switch (s) { Status.active ____ "çalışıyor", Status.idle => "bekliyor" };
final label = switch (s) { Status.active => "çalışıyor", Status.idle => "bekliyor" };
Açıklama: => solundaki deseni sağdaki değere bağlar.
2 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 Doğru cevap
- if yerine kullanılamaz
Açıklama: switch expression değer döndürür, break gerekmez.
3 Pattern eşleştir
| Kavram | Anlamı |
|---|---|
pattern |
desen |
=> |
değer üretir |
_ |
diğer durumlar |
destructure |
alanları açar |