Menu
CoddyTech

Pengantar Mixin

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

Kamu telah belajar bahwa Dart hanya mengizinkan perluasan satu class, dan meskipun kamu bisa mengimplementasikan beberapa antarmuka, kamu harus menulis semua kodenya sendiri. Namun, bagaimana jika kamu ingin berbagi kode implementasi yang sebenarnya di antara beberapa class yang tidak saling terkait? Di sinilah mixin berperan.

Mixin adalah cara untuk menggunakan kembali kode di beberapa hierarki class. Anggap saja sebagai kumpulan method dan property yang bisa kamu "campurkan" ke class apa pun, sehingga class tersebut mendapat kemampuan baru tanpa menggunakan pewarisan.

mixin Swimming {
  void swim() {
    print('Swimming through the water');
  }
}

class Duck with Swimming {
  void quack() {
    print('Quack!');
  }
}

class Fish with Swimming {
  void blowBubbles() {
    print('Blub blub');
  }
}

void main() {
  var duck = Duck();
  duck.quack();
  duck.swim();  // Dari mixin
  
  var fish = Fish();
  fish.swim();  // Implementasi sama, class berbeda
}

Perhatikan kata kunci with. Inilah cara menerapkan mixin ke class. Berbeda dengan implements, kamu tidak perlu menulis method-nya sendiri. Mixin menyediakan kode yang sebenarnya, dan class-mu mendapatkan fungsionalitas itu secara otomatis.

Mixin mengatasi masalah nyata: Duck dan Fish tidak berhubungan melalui pewarisan, tetapi keduanya membutuhkan perilaku berenang. Dengan mixin, kamu menulis kode sekali dan membagikannya di mana pun diperlukan.

challenge icon

Tantangan

Mudah

Mari buat sistem alat musik yang menunjukkan cara mixin memungkinkan kamu berbagi perilaku di antara class yang tidak saling berhubungan. Kamu akan membuat mixin yang menyediakan fungsi penyeteman, lalu menerapkannya pada berbagai alat musik yang tidak berhubungan melalui pewarisan.

Kamu akan mengatur kodemu ke dalam dua file:

  • instruments.dart: Definisikan mixin dan class alat musikmu di sini:
    • Mixin Tunable dengan method tune() yang mencetak Tuning the instrument... dan method checkTuning() yang mencetak Tuning is perfect!
    • Class Guitar yang menggunakan mixin Tunable. Tambahkan property String brand dengan constructor. Sertakan method strum() yang mencetak [brand] guitar strumming chords
    • Class Piano yang juga menggunakan mixin Tunable. Tambahkan property int keys dengan constructor. Sertakan method play() yang mencetak Playing [keys]-key piano
  • main.dart: Impor file alat musikmu dan tunjukkan cara kedua alat musik yang tidak saling berhubungan mendapatkan kemampuan menyetem dari mixin yang sama:
    • Buat Guitar dengan merek 'Fender'
    • Buat Piano dengan 88 tuts
    • Untuk gitar: panggil tune(), lalu strum(), kemudian checkTuning()
    • Cetak satu baris kosong
    • Untuk piano: panggil tune(), lalu play(), kemudian checkTuning()

Perhatikan bahwa Guitar dan Piano adalah alat musik yang sangat berbeda dan tidak memiliki hubungan pewarisan, tetapi keduanya mendapatkan method penyeteman yang sama persis dari mixin Tunable. Kamu menulis kode penyeteman satu kali, lalu kedua class dapat menggunakannya dengan kata kunci with.

Output yang diharapkan:

Tuning the instrument...
Fender guitar strumming chords
Tuning is perfect!

Tuning the instrument...
Playing 88-key piano
Tuning is perfect!

Coba sendiri

import 'instruments.dart';

void main() {
  // TODO: Buat Guitar dengan merek 'Fender'
  
  // TODO: Buat Piano dengan 88 tuts
  
  // TODO: Untuk gitarmu, panggil tune(), lalu strum(), lalu checkTuning()
  
  // TODO: Cetak satu baris kosong
  
  // TODO: Untuk pianomu, panggil tune(), lalu play(), lalu checkTuning()
}
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