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
}Tantangan
MudahMari 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 classTaskyang mewakili item yang harus dikerjakan, denganname(String) danpriority(int, angka yang lebih besar berarti prioritas lebih tinggi). Class tugasmu harus mengimplementasikanComparable<Task>agar saat diurutkan, tugas muncul dalam urutan prioritas menurun, dengan prioritas tertinggi di awal. Ganti implementasitoString()agar mengembalikan format:[name] (Priority: [priority])main.dart: Impor file tugasmu dan tunjukkan bagaimana antarmukaComparablememungkinkan pengurutan otomatis. Buat list yang berisi empat tugas berikut:'Write report'dengan prioritas2'Fix critical bug'dengan prioritas5'Update documentation'dengan prioritas1'Review code'dengan prioritas3
Before sorting:, lalu cetak setiap tugas. Urutkan list menggunakansort(), cetak satu baris kosong, lalu cetakAfter 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
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan11Metode Khusus
Override toString()Override hashCode & ==Antarmuka Comparablecall() methodOverride noSuchMethodRingkasan: Koleksi Kustom3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online