Menu
CoddyTech

Kata Kunci on pada Mixin

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

Terkadang, mixin perlu menggunakan method atau property dari class tempat mixin itu dicampurkan. Kata kunci on memungkinkan kamu membatasi penggunaan mixin hanya pada class yang memperluas tipe tertentu.

class Animal {
  String name;
  Animal(this.name);
  
  void breathe() => print('$name is breathing');
}

mixin Swimming on Animal {
  void swim() {
    print('$name is swimming');  // Bisa mengakses 'name' dari Animal
    breathe();  // Bisa memanggil method milik Animal
  }
}

class Fish extends Animal with Swimming {
  Fish(String name) : super(name);
}

Deklarasi on Animal berarti mixin ini hanya dapat diterapkan pada class yang memperluas Animal. Ini menjamin mixin memiliki akses ke anggota Animal. Tanpa on, mixin tidak akan tahu bahwa name atau breathe() ada.

Jika kamu mencoba menggunakan mixin terbatas pada class yang tidak kompatibel, Dart akan memberikan error saat kompilasi:

class Robot with Swimming {}  // Error! Robot tidak meng-extend Animal

Batasan ini berguna ketika fungsionalitas mixin-mu bergantung pada kemampuan tertentu dari class dasar. Batasan ini menciptakan kontrak yang lebih aman: mixin menjanjikan perilaku tertentu, tetapi hanya jika memiliki fondasi yang diperlukan agar dapat bekerja dengan benar.

challenge icon

Tantangan

Mudah

Mari buat sistem kendaraan yang menunjukkan cara kata kunci on membatasi mixin agar hanya berfungsi dengan class dasar tertentu. Kamu akan membuat mixin yang menambahkan fungsi turbo boost, tetapi mixin ini hanya dapat digunakan oleh class yang memperluas class dasar Vehicle.

Kamu akan menyusun kodemu dalam dua file:

  • vehicles.dart: Definisikan class dasar, mixin terbatas, dan jenis kendaraan di sini:
    • Class Vehicle dengan property String model dan property int speed. Sertakan constructor yang menerima kedua nilai tersebut. Tambahkan method accelerate() yang mencetak [model] accelerating to [speed] km/h
    • Mixin TurboBoost yang dibatasi untuk Vehicle menggunakan kata kunci on. Mixin ini harus memiliki method activateTurbo() yang mencetak [model] TURBO ACTIVATED! lalu memanggil accelerate() (keduanya dapat diakses karena batasan on Vehicle)
    • Class SportsCar yang memperluas Vehicle dan menggunakan mixin TurboBoost. Tambahkan property String color. Constructor harus menerima model, speed, dan color. Sertakan method showOff() yang mencetak [color] [model] ready to race!
  • main.dart: Impor file kendaraanmu dan tunjukkan cara kerja mixin terbatas:
    • Buat SportsCar dengan model 'Ferrari', speed 320, dan color 'Red'
    • Panggil showOff()
    • Panggil activateTurbo()

Mixin TurboBoost dapat mengakses model dan memanggil accelerate() karena deklarasi on Vehicle menjamin bahwa mixin ini hanya akan dicampurkan ke class yang memperluas Vehicle. Ini membuat kontrak yang aman, sehingga mixin mengetahui dengan tepat kemampuan apa saja yang tersedia.

Output yang diharapkan:

Red Ferrari ready to race!
Ferrari TURBO ACTIVATED!
Ferrari accelerating to 320 km/h

Coba sendiri

import 'vehicles.dart';

void main() {
  // TODO: Buat SportsCar dengan model 'Ferrari', speed 320, dan color 'Red'
  
  // TODO: Panggil showOff()
  
  // TODO: Panggil activateTurbo()
}
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