Menu
CoddyTech

Membuat Mixin

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

Sekarang setelah kamu memahami apa itu mixin, mari kita lihat cara membuatnya dengan benar. Mixin dideklarasikan menggunakan kata kunci mixin, bukan class.

mixin Logging {
  void log(String message) {
    print('[LOG] $message');
  }
  
  void logError(String error) {
    print('[ERROR] $error');
  }
}

Mixin dapat berisi method, property, bahkan getter dan setter, sama seperti class. Namun, ada satu aturan penting: mixin tidak boleh memiliki constructor. Karena mixin dimaksudkan untuk dicampurkan, bukan dibuat sebagai instance secara langsung, mixin tidak memerlukan logika inisialisasi.

mixin Timestamped {
  DateTime createdAt = DateTime.now();
  
  String get formattedTime => createdAt.toString();
  
  void printTimestamp() {
    print('Created at: $formattedTime');
  }
}

class Document with Timestamped {
  String title;
  Document(this.title);
}

void main() {
  var doc = Document('Report');
  doc.printTimestamp();  // Menggunakan method dari mixin
  print(doc.createdAt);  // Menggunakan property dari mixin
}

Saat kamu menerapkan mixin dengan with, semua anggotanya menjadi bagian dari class-mu. Class tersebut dapat menggunakannya secara langsung, begitu juga kode apa pun yang memiliki instance dari class tersebut. Dengan begitu, mixin menjadi cara yang praktis untuk menambahkan fungsionalitas yang dapat digunakan kembali tanpa kerumitan hierarki pewarisan.

challenge icon

Tantangan

Mudah

Mari kita buat sistem pesan yang menunjukkan cara membuat mixin dengan method, property, dan getter. Kamu akan merancang mixin yang menambahkan kemampuan pemformatan ke berbagai jenis pesan.

Kamu akan mengatur kodemu ke dalam dua file:

  • messaging.dart: Definisikan mixin dan class pesanmu di sini:
    • Mixin Formattable yang berisi:
      • Property String prefix yang diinisialisasi dengan '>>>'
      • Getter separator yang mengembalikan ' | '
      • Method format(String text) yang mengembalikan string [prefix][separator][text]
      • Method formatBold(String text) yang mengembalikan **[text]**
    • Class TextMessage yang menggunakan mixin Formattable. Tambahkan property String sender dengan constructor. Sertakan method send(String content) yang mencetak hasil pemanggilan format() dengan [sender]: [content]
    • Class AlertMessage yang juga menggunakan mixin Formattable. Tambahkan property String level dengan constructor. Sertakan method alert(String content) yang mencetak hasil pemanggilan format() dengan [[level]] [formatBold(content)]
  • main.dart: Impor file pesanmu dan tunjukkan cara kedua jenis pesan mendapatkan kemampuan pemformatan dari mixin:
    • Buat TextMessage dengan pengirim 'Alice'
    • Buat AlertMessage dengan level 'WARNING'
    • Panggil send('Hello there!') pada pesan teks
    • Panggil alert('System overload') pada pesan peringatan

Mixin-mu menunjukkan bahwa mixin dapat berisi property dengan nilai default, getter yang menghitung nilai, dan beberapa method yang bahkan dapat saling memanggil. Kedua class pesan mendapatkan semua kemampuan ini hanya dengan menggunakan kata kunci with.

Output yang diharapkan:

>>> | Alice: Hello there!
>>> | [WARNING] **System overload**

Coba sendiri

import 'messaging.dart';

void main() {
  // TODO: Buat TextMessage dengan pengirim 'Alice'
  
  // TODO: Buat AlertMessage dengan level 'WARNING'
  
  // TODO: Panggil send('Hello there!') pada pesan teks
  
  // TODO: Panggil alert('System overload') pada pesan peringatan
}
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