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 AnimalBatasan 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.
Tantangan
MudahMari 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
Vehicledengan propertyString modeldan propertyint speed. Sertakan constructor yang menerima kedua nilai tersebut. Tambahkan methodaccelerate()yang mencetak[model] accelerating to [speed] km/h - Mixin
TurboBoostyang dibatasi untukVehiclemenggunakan kata kuncion. Mixin ini harus memiliki methodactivateTurbo()yang mencetak[model] TURBO ACTIVATED!lalu memanggilaccelerate()(keduanya dapat diakses karena batasanon Vehicle) - Class
SportsCaryang memperluasVehicledan menggunakan mixinTurboBoost. Tambahkan propertyString color. Constructor harus menerima model, speed, dan color. Sertakan methodshowOff()yang mencetak[color] [model] ready to race!
- Class
main.dart: Impor file kendaraanmu dan tunjukkan cara kerja mixin terbatas:- Buat
SportsCardengan model'Ferrari', speed320, dan color'Red' - Panggil
showOff() - Panggil
activateTurbo()
- Buat
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/hCoba sendiri
import 'vehicles.dart';
void main() {
// TODO: Buat SportsCar dengan model 'Ferrari', speed 320, dan color 'Red'
// TODO: Panggil showOff()
// TODO: Panggil activateTurbo()
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online