Menu
Coddy logo textTech

Metot İçeren Enum'lar

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 88 / 110.

Dart'ta enum'lar yalnızca basit sabit listeleri değildir; alanlara, yapıcılara ve metotlara sahip olabilirler. Bu da onları güçlü mini sınıflar hâline getirir. Buna gelişmiş enum'lar adı verilir ve davranışları ve verileri doğrudan her enum değerine eklemenizi sağlar.

enum Status {
  pending('Waiting'),
  approved('Accepted'),
  rejected('Denied');

  final String displayName;
  
  const Status(this.displayName);
  
  bool get isFinalized => this == approved || this == rejected;
}

void main() {
  var status = Status.pending;
  print(status.displayName);    // Waiting
  print(status.isFinalized);    // false
  
  print(Status.approved.isFinalized);  // true
}

Her enum değeri, kendine özgü bağımsız değişkenleriyle oluşturucuyu çağırır. Oluşturucu const olmalı ve tüm alanlar final olmalıdır. Enum’un verileriyle çalışan veya diğer değerlerle karşılaştırma yapan getter’lar ve metotlar ekleyebilirsin.

Gelişmiş enum'lar, arayüzleri de uygulayabilir ve böylece onlara daha da fazla esneklik kazandırır:

enum Priority implements Comparable<Priority> {
  low(1),
  medium(2),
  high(3);

  final int level;
  const Priority(this.level);

  @override
  int compareTo(Priority other) => level.compareTo(other.level);
}

void main() {
  var tasks = [Priority.high, Priority.low, Priority.medium];
  tasks.sort();
  print(tasks);  // [Priority.low, Priority.medium, Priority.high]
}

Geliştirilmiş enum'lar, her birinin kendisiyle ilişkilendirilmiş verilere veya davranışa ihtiyaç duyduğu sabit bir değer kümesine sahip olduğunuzda idealdir; örneğin mesajları olan durum kodları, seviyeleri olan öncelikler veya koordinatları olan yönler.

challenge icon

Görev

Kolay

Geliştirilmiş enum'ları kullanarak bir görev yönetimi sistemi oluşturalım! Farklı görev kategorilerini temsil eden bir enum oluşturacak ve her bir kategoriye, çalışmayı düzenlemeye ve önceliklendirmeye yardımcı olan kendine özgü özellikler ve davranışlar ekleyeceksin.

Kodunu iki dosyaya ayıracaksın:

  • task_category.dart: Bir projedeki farklı görev türlerini temsil eden TaskCategory adlı geliştirilmiş bir enum oluştur. Her kategori şunlara sahip olmalı:
    • İnsan tarafından okunabilir bir ad için bir String label alanı
    • Bir int priority alanı (1 en yüksek, 3 en düşük önceliktir)
    • Her iki alanı da başlatan bir const yapıcı
    • Dört enum değeri: bug (label: "Bug Fix", priority: 1), feature (label: "New Feature", priority: 2), documentation (label: "Documentation", priority: 3) ve testing (label: "Testing", priority: 2)
    • Öncelik 1 ise isUrgent döndüren bir true getter'ı
    • describe() biçiminde bir dize döndüren bir [label] (Priority: [priority]) metodu
    Enum'un ayrıca görevlerin önceliğe göre sıralanabilmesi için Comparable<TaskCategory> arayüzünü uygulaması gerekir (daha düşük öncelik numarası = önce gelir).
  • main.dart: Görev kategorisi enum'unu içe aktar ve özelliklerini göster:
    • Dört görev kategorisinin tümünü şu sırayla içeren bir liste oluştur: feature, bug, documentation, testing
    • Her kategorinin açıklamasını describe() metodunu kullanarak satır başına bir tane olacak şekilde yazdır
    • Boş bir satır yazdır
    • Listeyi önceliğe göre sırala ve After sorting by priority: yazdır
    • Sıralanmış her kategorinin etiketini satır başına bir tane olacak şekilde yazdır
    • Boş bir satır yazdır
    • Urgent tasks: yazdır
    • Özgün sırada (feature, bug, documentation, testing) döngüye gir ve yalnızca isUrgent değeri true olan kategorilerin etiketlerini yazdır

Bu görev; alanlar, yapıcılar, getter'lar, metotlar ve arayüz uygulama gibi geliştirilmiş enum özelliklerini bir araya getirerek kullanışlı bir görev kategorilendirme sistemi oluşturur!

Beklenen çıktı:

New Feature (Priority: 2)
Bug Fix (Priority: 1)
Documentation (Priority: 3)
Testing (Priority: 2)

After sorting by priority:
Bug Fix
New Feature
Testing
Documentation

Urgent tasks:
Bug Fix

Kendin dene

import 'task_category.dart';

void main() {
  // TODO: Bu sırayla dört görev kategorisinin tümünü içeren bir liste oluşturun:
  // feature, bug, documentation, testing
  
  // TODO: describe() kullanarak her kategorinin açıklamasını her satıra bir tane gelecek şekilde yazdırın
  
  // TODO: Boş bir satır yazdırın
  
  // TODO: Listeyi önceliğe göre sıralayın
  
  // TODO: "After sorting by priority:" yazdırın
  
  // TODO: Sıralanmış her kategorinin etiketini her satıra bir tane gelecek şekilde yazdırın
  
  // TODO: Boş bir satır yazdırın
  
  // TODO: "Urgent tasks:" yazdırın
  
  // TODO: Orijinal sıra (feature, bug, documentation, testing) üzerinde döngü kurun
  // ve yalnızca isUrgent değeri true olan kategorilerin etiketlerini yazdırın
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi