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