Enum dengan method
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 88 dari 110.
Di Dart, enum bukan sekadar daftar konstanta sederhana. Enum bisa memiliki field, constructor, dan method, sehingga menjadi class mini yang tangguh. Ini disebut enum yang disempurnakan, dan memungkinkan kamu melampirkan perilaku dan data langsung ke setiap nilai enum.
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
}Setiap nilai enum memanggil constructor dengan argumen khususnya. Constructor harus berupa const, dan semua field harus berupa final. Kamu bisa menambahkan getter dan method yang menggunakan data enum atau membandingkan nilainya dengan nilai lain.
Enum yang ditingkatkan juga dapat mengimplementasikan interface, sehingga menjadi lebih fleksibel:
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]
}Enum yang disempurnakan sangat cocok ketika kamu memiliki sekumpulan nilai tetap yang masing-masing membutuhkan data atau perilaku terkait, seperti kode status dengan pesan, prioritas dengan level, atau arah dengan koordinat.
Tantangan
MudahMari bangun sistem manajemen tugas menggunakan enum yang ditingkatkan! Kamu akan membuat enum yang mewakili berbagai kategori tugas, masing-masing dengan property dan perilakunya sendiri untuk membantu mengatur dan memprioritaskan pekerjaan.
Kamu akan mengatur kodemu ke dalam dua file:
task_category.dart: Buat enum yang ditingkatkan bernamaTaskCategoryyang mewakili berbagai jenis tugas dalam sebuah proyek. Setiap kategori harus memiliki:- Field
String labeluntuk nama yang mudah dibaca - Field
int priority(1 berarti prioritas tertinggi, 3 berarti terendah) - Konstruktor
constyang menginisialisasi kedua field - Empat nilai enum:
bug(label: "Bug Fix", priority: 1),feature(label: "New Feature", priority: 2),documentation(label: "Documentation", priority: 3), dantesting(label: "Testing", priority: 2) - Getter
isUrgentyang mengembalikantruejika prioritasnya 1 - Method
describe()yang mengembalikan string dengan format:[label] (Priority: [priority])
Comparable<TaskCategory>agar tugas dapat diurutkan berdasarkan prioritas (angka prioritas yang lebih kecil berarti urutan lebih awal).- Field
main.dart: Impor enum kategori tugasmu dan tunjukkan kemampuannya:- Buat list yang berisi keempat kategori tugas dengan urutan ini:
feature,bug,documentation,testing - Cetak deskripsi setiap kategori menggunakan method
describe(), satu per baris - Cetak satu baris kosong
- Urutkan list berdasarkan prioritas dan cetak
After sorting by priority: - Cetak label setiap kategori yang sudah diurutkan, satu per baris
- Cetak satu baris kosong
- Cetak
Urgent tasks: - Lakukan perulangan melalui urutan semula (
feature,bug,documentation,testing) dan cetak hanya label kategori yang nilaiisUrgent-nya adalah true
- Buat list yang berisi keempat kategori tugas dengan urutan ini:
Tantangan ini menggabungkan fitur enum yang ditingkatkan: field, konstruktor, getter, method, dan implementasi antarmuka, semuanya bekerja sama untuk membuat sistem kategorisasi tugas yang berguna!
Output yang diharapkan:
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 FixCoba sendiri
import 'task_category.dart';
void main() {
// TODO: Buat list berisi keempat kategori tugas dalam urutan ini:
// feature, bug, documentation, testing
// TODO: Cetak deskripsi setiap kategori menggunakan describe(), satu per baris
// TODO: Cetak satu baris kosong
// TODO: Urutkan list berdasarkan prioritas
// TODO: Cetak "After sorting by priority:"
// TODO: Cetak label setiap kategori yang sudah diurutkan, satu per baris
// TODO: Cetak satu baris kosong
// TODO: Cetak "Urgent tasks:"
// TODO: Ulangi urutan awal (feature, bug, documentation, testing)
// dan cetak hanya label kategori yang isUrgent bernilai true
}
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 Generik13Konsep OOP Lanjutan
Komposisi vs PewarisanExtension methodClass yang Dapat DipanggilSealed class (Dart 3)Records (Dart 3)Pola dan Pencocokan (3.0)Enum dengan method2Konstruktor 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 Hewan3Property 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