Menu
CoddyTech

Antarmuka Comparable

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 72 dari 110.

Meskipun == memberi tahu apakah dua object sama, terkadang kamu perlu mengetahui object mana yang lebih dahulu. Interface Comparable memungkinkan object-mu diurutkan dengan menetapkan urutan alami.

Untuk membuat class dapat dibandingkan, implementasikan Comparable<T> dan override method compareTo. Method ini mengembalikan angka negatif jika this berada sebelum other, nol jika keduanya sama, dan angka positif jika this berada setelahnya:

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
}

Setelah class-mu mengimplementasikan Comparable, kamu bisa menggunakan sort() tanpa memberikan comparator khusus. Tipe numerik dan string bawaan sudah mengimplementasikan Comparable, itulah sebabnya grade.compareTo(other.grade) bisa langsung digunakan.

Untuk urutan menurun, cukup balikkan perbandingannya dengan menukar object atau menegasikan hasilnya:

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

Tantangan

Mudah

Mari buat sistem pengelolaan tugas yang dapat mengurutkan tugas berdasarkan tingkat prioritasnya! Kamu akan membuat class Task yang mengimplementasikan antarmuka Comparable, sehingga list tugas dapat diurutkan secara otomatis dari prioritas tertinggi ke terendah.

Kamu akan menyusun kodemu ke dalam dua file:

  • task.dart: Buat class Task yang mewakili item yang harus dikerjakan, dengan name (String) dan priority (int, angka yang lebih besar berarti prioritas lebih tinggi). Class tugasmu harus mengimplementasikan Comparable<Task> agar saat diurutkan, tugas muncul dalam urutan prioritas menurun, dengan prioritas tertinggi di awal. Ganti implementasi toString() agar mengembalikan format: [name] (Priority: [priority])
  • main.dart: Impor file tugasmu dan tunjukkan bagaimana antarmuka Comparable memungkinkan pengurutan otomatis. Buat list yang berisi empat tugas berikut:
    • 'Write report' dengan prioritas 2
    • 'Fix critical bug' dengan prioritas 5
    • 'Update documentation' dengan prioritas 1
    • 'Review code' dengan prioritas 3
    Cetak Before sorting:, lalu cetak setiap tugas. Urutkan list menggunakan sort(), cetak satu baris kosong, lalu cetak After sorting: diikuti setiap tugas sekali lagi.

Karena class Task mengimplementasikan Comparable, kamu dapat langsung memanggil sort() pada list tanpa memberikan pembanding khusus. Tugas-tugas akan diurutkan secara otomatis berdasarkan implementasi compareTo milikmu!

Output yang diharapkan:

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)

Coba sendiri

import 'task.dart';

void main() {
  // TODO: Buat list berisi object Task berikut:
  // - 'Write report' dengan prioritas 2
  // - 'Fix critical bug' dengan prioritas 5
  // - 'Update documentation' dengan prioritas 1
  // - 'Review code' dengan prioritas 3
  
  List<Task> tasks = [
    // TODO: Tambahkan keempat task di sini
  ];
  
  // TODO: Cetak "Before sorting:"
  // TODO: Cetak setiap task dalam list
  
  // TODO: Urutkan list menggunakan sort()
  
  // TODO: Cetak baris kosong
  
  // TODO: Cetak "After sorting:"
  // TODO: Cetak setiap task dalam list yang sudah diurutkan
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Dart online