Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 bernama TaskCategory yang mewakili berbagai jenis tugas dalam sebuah proyek. Setiap kategori harus memiliki:
    • Field String label untuk nama yang mudah dibaca
    • Field int priority (1 berarti prioritas tertinggi, 3 berarti terendah)
    • Konstruktor const yang menginisialisasi kedua field
    • Empat nilai enum: bug (label: "Bug Fix", priority: 1), feature (label: "New Feature", priority: 2), documentation (label: "Documentation", priority: 3), dan testing (label: "Testing", priority: 2)
    • Getter isUrgent yang mengembalikan true jika prioritasnya 1
    • Method describe() yang mengembalikan string dengan format: [label] (Priority: [priority])
    Enum-mu juga harus mengimplementasikan Comparable<TaskCategory> agar tugas dapat diurutkan berdasarkan prioritas (angka prioritas yang lebih kecil berarti urutan lebih awal).
  • 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 nilai isUrgent-nya adalah true

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 Fix

Coba 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
}
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