Membuat Mixin
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 51 dari 110.
Sekarang setelah kamu memahami apa itu mixin, mari kita lihat cara membuatnya dengan benar. Mixin dideklarasikan menggunakan kata kunci mixin, bukan class.
mixin Logging {
void log(String message) {
print('[LOG] $message');
}
void logError(String error) {
print('[ERROR] $error');
}
}Mixin dapat berisi method, property, bahkan getter dan setter, sama seperti class. Namun, ada satu aturan penting: mixin tidak boleh memiliki constructor. Karena mixin dimaksudkan untuk dicampurkan, bukan dibuat sebagai instance secara langsung, mixin tidak memerlukan logika inisialisasi.
mixin Timestamped {
DateTime createdAt = DateTime.now();
String get formattedTime => createdAt.toString();
void printTimestamp() {
print('Created at: $formattedTime');
}
}
class Document with Timestamped {
String title;
Document(this.title);
}
void main() {
var doc = Document('Report');
doc.printTimestamp(); // Menggunakan method dari mixin
print(doc.createdAt); // Menggunakan property dari mixin
}Saat kamu menerapkan mixin dengan with, semua anggotanya menjadi bagian dari class-mu. Class tersebut dapat menggunakannya secara langsung, begitu juga kode apa pun yang memiliki instance dari class tersebut. Dengan begitu, mixin menjadi cara yang praktis untuk menambahkan fungsionalitas yang dapat digunakan kembali tanpa kerumitan hierarki pewarisan.
Tantangan
MudahMari kita buat sistem pesan yang menunjukkan cara membuat mixin dengan method, property, dan getter. Kamu akan merancang mixin yang menambahkan kemampuan pemformatan ke berbagai jenis pesan.
Kamu akan mengatur kodemu ke dalam dua file:
messaging.dart: Definisikan mixin dan class pesanmu di sini:- Mixin
Formattableyang berisi:- Property
String prefixyang diinisialisasi dengan'>>>' - Getter
separatoryang mengembalikan' | ' - Method
format(String text)yang mengembalikan string[prefix][separator][text] - Method
formatBold(String text)yang mengembalikan**[text]**
- Property
- Class
TextMessageyang menggunakan mixinFormattable. Tambahkan propertyString senderdengan constructor. Sertakan methodsend(String content)yang mencetak hasil pemanggilanformat()dengan[sender]: [content] - Class
AlertMessageyang juga menggunakan mixinFormattable. Tambahkan propertyString leveldengan constructor. Sertakan methodalert(String content)yang mencetak hasil pemanggilanformat()dengan[[level]] [formatBold(content)]
- Mixin
main.dart: Impor file pesanmu dan tunjukkan cara kedua jenis pesan mendapatkan kemampuan pemformatan dari mixin:- Buat
TextMessagedengan pengirim'Alice' - Buat
AlertMessagedengan level'WARNING' - Panggil
send('Hello there!')pada pesan teks - Panggil
alert('System overload')pada pesan peringatan
- Buat
Mixin-mu menunjukkan bahwa mixin dapat berisi property dengan nilai default, getter yang menghitung nilai, dan beberapa method yang bahkan dapat saling memanggil. Kedua class pesan mendapatkan semua kemampuan ini hanya dengan menggunakan kata kunci with.
Output yang diharapkan:
>>> | Alice: Hello there!
>>> | [WARNING] **System overload**Coba sendiri
import 'messaging.dart';
void main() {
// TODO: Buat TextMessage dengan pengirim 'Alice'
// TODO: Buat AlertMessage dengan level 'WARNING'
// TODO: Panggil send('Hello there!') pada pesan teks
// TODO: Panggil alert('System overload') pada pesan peringatan
}
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