Kelas Generik
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 65 dari 110.
Kamu sudah melihat bagaimana koleksi bawaan Dart seperti List<String> menggunakan parameter tipe. Sekarang saatnya membuat class generikmu sendiri yang berfungsi dengan tipe apa pun yang kamu tentukan.
class generik menggunakan parameter tipe (biasanya T) sebagai placeholder untuk tipe sebenarnya yang akan diberikan saat membuat sebuah instance:
class Box<T> {
T content;
Box(this.content);
T getContent() => content;
}
void main() {
var stringBox = Box<String>('Hello');
var intBox = Box<int>(42);
print(stringBox.getContent()); // Hello
print(intBox.getContent()); // 42
}T berfungsi sebagai variabel tipe. Saat kamu membuat Box<String>, setiap T di dalam class menjadi String. Dengan begitu, kamu mendapatkan keamanan tipe tanpa perlu menulis class terpisah untuk setiap tipe.
Kamu bisa menggunakan beberapa parameter tipe saat class-mu perlu bekerja dengan lebih dari satu tipe:
class Pair<K, V> {
K first;
V second;
Pair(this.first, this.second);
}
void main() {
var pair = Pair<String, int>('age', 25);
print('${pair.first}: ${pair.second}'); // age: 25
}class generik adalah fondasi untuk kode yang dapat digunakan kembali dan aman dari segi tipe. Daripada menggandakan logika untuk berbagai tipe atau kehilangan informasi tipe dengan dynamic, generik memungkinkan kamu menulis kode fleksibel yang tetap dapat diperiksa oleh compiler.
Tantangan
MudahMari kita buat sistem pembungkus hadiah yang menggunakan class generik untuk membuat wadah fleksibel bagi berbagai jenis barang. Kamu akan membuat class generik Wrapper yang dapat membungkus konten dengan tipe apa pun, dan class GiftBox dengan dua parameter tipe untuk memasangkan hadiah dengan pesan kartu.
Kamu akan mengatur kodemu ke dalam dua file:
wrapper.dart: Definisikan class generikmu di sini:- Class generik
Wrapper<T>dengan propertyT contentdan sebuah constructor. Sertakan methodunwrap()yang mengembalikan konten, serta methoddescribe()yang mencetakWrapped: [content] - Class generik
GiftBox<G, C>dengan dua property:G giftdanC card. Sertakan sebuah constructor dan methodopen()yang mencetakGift: [gift]pada satu baris danCard: [card]pada baris berikutnya
- Class generik
main.dart: Impor file wrapper-mu dan tunjukkan penggunaan class generik dengan berbagai tipe:- Buat
Wrapper<String>yang berisi'Chocolate'dan panggildescribe() - Buat
Wrapper<int>yang berisi42dan panggildescribe() - Buat
Wrapper<double>yang berisi3.14dan panggildescribe() - Cetak satu baris kosong
- Buat
GiftBox<String, String>dengan hadiah'Teddy Bear'dan kartu'Happy Birthday!', lalu panggilopen() - Cetak satu baris kosong
- Buat
GiftBox<int, String>dengan hadiah100(yang mewakili jumlah uang pada kartu hadiah) dan kartu'Congratulations!', lalu panggilopen()
- Buat
Perhatikan bagaimana class Wrapper yang sama dapat digunakan dengan string, bilangan bulat, dan bilangan desimal. Class GiftBox menunjukkan penggunaan dua parameter tipe untuk memasangkan berbagai tipe, hadiah dapat memiliki tipe apa pun, sedangkan pesan kartu tetap berupa string.
Output yang diharapkan:
Wrapped: Chocolate
Wrapped: 42
Wrapped: 3.14
Gift: Teddy Bear
Card: Happy Birthday!
Gift: 100
Card: Congratulations!Coba sendiri
import 'wrapper.dart';
void main() {
// TODO: Buat Wrapper<String> berisi 'Chocolate' lalu panggil describe()
// TODO: Buat Wrapper<int> berisi 42 lalu panggil describe()
// TODO: Buat Wrapper<double> berisi 3.14 lalu panggil describe()
// TODO: Cetak baris kosong
// TODO: Buat GiftBox<String, String> dengan hadiah 'Teddy Bear'
// dan kartu 'Happy Birthday!', lalu panggil open()
// TODO: Cetak baris kosong
// TODO: Buat GiftBox<int, String> dengan hadiah 100
// dan kartu 'Congratulations!', lalu panggil open()
}
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