Menu
Coddy logo textTech

Comparable Arayüzü

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

== iki nesnenin eşit olup olmadığını söylerken, bazen hangisinin önce geldiğini bilmeniz gerekir. Comparable arayüzü, doğal bir sıralama tanımlayarak nesnelerinizin sıralanmasını sağlar.

Bir class'ı karşılaştırılabilir hale getirmek için Comparable<T> uygulayın ve compareTo method'unu override edin. Bu method, this other'dan önce geliyorsa negatif bir sayı, eşitse sıfır ve this sonra geliyorsa pozitif bir sayı döndürür:

class Student implements Comparable<Student> {
  String name;
  int grade;
  
  Student(this.name, this.grade);
  
  @override
  int compareTo(Student other) {
    return grade.compareTo(other.grade);
  }
}

void main() {
  var students = [
    Student('Alice', 85),
    Student('Bob', 92),
    Student('Carol', 78),
  ];
  
  students.sort();
  
  for (var s in students) {
    print('${s.name}: ${s.grade}');
  }
  // Carol: 78, Alice: 85, Bob: 92
}

Sınıfınız Comparable uyguladığında, özel bir karşılaştırıcı sağlamadan sort() kullanabilirsiniz. Yerleşik sayısal ve dize türleri zaten Comparable uygular; bu nedenle grade.compareTo(other.grade) doğrudan çalışır.

Azalan sıralama için, nesneleri yer değiştirerek veya sonucu olumsuzlayarak karşılaştırmayı tersine çevirmen yeterlidir:

@override
int compareTo(Student other) {
  return other.grade.compareTo(grade);  // Azalan
}
challenge icon

Görev

Kolay

Görevlerin öncelik düzeylerine göre sıralanabildiği bir görev yönetim sistemi oluşturalım! Comparable arayüzünü uygulayan bir Task sınıfı oluşturacak ve böylece görev listesinin en yüksek öncelikten en düşük önceliğe doğru otomatik olarak sıralanmasını sağlayacaksın.

kodunu iki dosyada düzenleyeceksin:

  • task.dart: name (String) ve priority (int; daha yüksek sayıların daha yüksek öncelik anlamına geldiği) değerlerine sahip bir yapılacaklar öğesini temsil eden bir Task sınıfı oluştur. Görevin, sıralandığında görevlerin önceliğe göre azalan düzende (en yüksek öncelik önce) görünmesi için Comparable<Task> uygulamalıdır. Ayrıca toString() yöntemini, şu biçimi döndürecek şekilde geçersiz kıl: [name] (Priority: [priority])
  • main.dart: görev dosyanı içe aktar ve Comparable arayüzünün otomatik sıralamayı nasıl etkinleştirdiğini göster. Şu dört görevi içeren bir liste oluştur:
    • önceliği 2 olan 'Write report'
    • önceliği 5 olan 'Fix critical bug'
    • önceliği 1 olan 'Update documentation'
    • önceliği 3 olan 'Review code'
    Before sorting: ifadesini yazdır, ardından her görevi yazdır. Listeyi sort() kullanarak sırala, boş bir satır yazdır, ardından After sorting: ifadesini ve tekrar her görevi yazdır.

Task sınıfın Comparable uyguladığı için özel bir karşılaştırıcı sağlamadan doğrudan liste üzerinde sort() çağırabilirsin. Görevler, compareTo uygulamana göre kendilerini otomatik olarak düzenler!

Beklenen çıktı:

Before sorting:
Write report (Priority: 2)
Fix critical bug (Priority: 5)
Update documentation (Priority: 1)
Review code (Priority: 3)

After sorting:
Fix critical bug (Priority: 5)
Review code (Priority: 3)
Write report (Priority: 2)
Update documentation (Priority: 1)

Kendin dene

import 'task.dart';

void main() {
  // TODO: Aşağıdakilerle bir Task nesneleri listesi oluştur:
  // - 'Write report' öncelik 2 ile
  // - 'Fix critical bug' with priority 5
  // - 'Update documentation' with priority 1
  // - 'Review code' öncelik 3 ile
  
  List<Task> tasks = [
    // TODO: Dört görevi buraya ekle
  ];
  
  // TODO: Print "Before sorting:"
  // TODO: Listedeki her görevi yazdır
  
  // TODO: Listeyi sort() kullanarak sırala
  
  // TODO: Boş bir satır yazdır
  
  // TODO: Print "After sorting:"
  // TODO: Sıralanmış listedeki her görevi yazdır
}
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