Learn
← Previous Next →

Hari 10: Mixin & Extension

60 min Last updated 09 Apr 2026

Mixin

Mixin memungkinkan satu class memiliki kemampuan dari beberapa mixin sekaligus (seperti multiple inheritance).

mixin Bisa_Terbang {
  void terbang() => print("$this sedang terbang!");
  double get kecepatanTerbang => 100.0;
}

mixin Bisa_Berenang {
  void berenang() => print("Sedang berenang...");
}

class Hewan {
  String nama;
  Hewan(this.nama);
  @override String toString() => nama;
}

class Bebek extends Hewan with Bisa_Terbang, Bisa_Berenang {
  Bebek(String nama) : super(nama);
  void kwek() => print("$nama: Kwek kwek!");
}

void main() {
  Bebek donald = Bebek("Donald");
  donald.kwek();
  donald.terbang();
  donald.berenang();
  print("Kecepatan terbang: ${donald.kecepatanTerbang} km/h");
}

Extension Methods

extension StringHelper on String {
  String capitalize() => isEmpty ? this : this[0].toUpperCase() + substring(1);
  bool get isPalindrome => this == split("").reversed.join("");
  String repeat(int n) => List.filled(n, this).join();
}

extension IntHelper on int {
  bool get isEven => this % 2 == 0;
  List range() => List.generate(this, (i) => i + 1);
}

void main() {
  print("hello".capitalize());        // Hello
  print("racecar".isPalindrome);      // true
  print("ha".repeat(3));              // hahaha
  print(5.isEven);                    // false
  print(5.range());                   // [1, 2, 3, 4, 5]
}

💡 Notice: with keyword digunakan untuk menerapkan mixin ke sebuah class.

Assignment

Buat mixin Logger dan Validator, gunakan keduanya di FormHandler.

Expected output:

[LOG] Memproses: user@test.com
[LOG] Email valid: true
[LOG] Memproses: bukan-email
[LOG] Email valid: false
Dart main.dart
Solution
Output