CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

main.dart
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

main.dart
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

Soru
final label = switch (s) { Status.active ____ "çalışıyor", Status.idle => "bekliyor" };
Cevap
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ı?

main.dart
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

Başlangıç bölümündeki tüm dersler