Metode Generik
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 66 dari 110.
Sama seperti class dapat bersifat generik, method individual juga dapat memiliki parameter tipe sendiri. Ini berguna saat kamu membutuhkan method yang fleksibel tanpa membuat seluruh class menjadi generik.
method generik mendeklarasikan parameter tipenya sebelum tipe return:
T findFirst<T>(List<T> items) {
return items.first;
}
void main() {
var firstNumber = findFirst<int>([1, 2, 3]);
var firstWord = findFirst<String>(['hello', 'world']);
print(firstNumber); // 1
print(firstWord); // hello
}Dart sering kali dapat menyimpulkan tipe dari argumen, jadi kamu tidak selalu perlu menentukannya secara eksplisit:
var result = findFirst([10, 20, 30]); // Dart menyimpulkan tipe data intmethod generik sangat berguna di dalam class ketika hanya operasi tertentu yang membutuhkan fleksibilitas tipe:
class Printer {
void printItem<T>(T item) {
print('Printing: $item');
}
List<T> duplicate<T>(T item, int count) {
return List.filled(count, item);
}
}
void main() {
var printer = Printer();
printer.printItem<String>('Hello');
printer.printItem(42); // Tipe disimpulkan sebagai int
var copies = printer.duplicate('Hi', 3);
print(copies); // [Hi, Hi, Hi]
}Generic method memberimu kendali terperinci atas keamanan tipe pada tingkat method, sehingga class-mu tetap lebih sederhana sambil tetap mendapatkan manfaat dari pemeriksaan tipe saat kompilasi.
Tantangan
MudahMari buat utilitas transformasi data yang menunjukkan keunggulan method generik. Kamu akan membuat class Transformer dengan method yang dapat bekerja dengan tipe apa pun, sehingga kamu mendapat fleksibilitas tanpa membuat seluruh class menjadi generik.
Kamu akan mengatur kodemu ke dalam dua file:
transformer.dart: Buat classTransformerdengan method generik berikut:T getFirst<T>(List<T> items)- mengembalikan elemen pertama dari sebuah listT getLast<T>(List<T> items)- mengembalikan elemen terakhir dari sebuah listList<T> repeat<T>(T item, int times)- membuat list yang berisi item yang diulang sebanyak jumlah yang ditentukanvoid printPair<A, B>(A first, B second)- mencetak dua nilai dalam formatPair: [first] and [second]
main.dart: Impor file transformer-mu dan tunjukkan setiap method generik dengan tipe yang berbeda:- Buat sebuah instance
Transformer - Gunakan
getFirstpada[10, 20, 30]dan cetak hasilnya - Gunakan
getFirstpada['apple', 'banana', 'cherry']dan cetak hasilnya - Gunakan
getLastpada[1.5, 2.5, 3.5]dan cetak hasilnya - Gunakan
repeatuntuk membuat list berisi'Hi'yang diulang sebanyak4kali, lalu cetak hasilnya - Gunakan
repeatuntuk membuat list berisi7yang diulang sebanyak3kali, lalu cetak hasilnya - Gunakan
printPairdengan'Name'dan42 - Gunakan
printPairdengan100dantrue
- Buat sebuah instance
Perhatikan bagaimana setiap method mendeklarasikan parameter tipe-nya sendiri, sehingga object Transformer yang sama dapat bekerja dengan integer, string, double, dan boolean, semuanya dengan keamanan tipe yang penuh. Method printPair menunjukkan penggunaan dua parameter tipe dalam satu method.
Output yang diharapkan:
10
apple
3.5
[Hi, Hi, Hi, Hi]
[7, 7, 7]
Pair: Name and 42
Pair: 100 and trueCoba sendiri
import 'transformer.dart';
void main() {
// Buat instance Transformer
var transformer = Transformer();
// TODO: Gunakan getFirst pada [10, 20, 30] dan cetak hasilnya
// TODO: Gunakan getFirst pada ['apple', 'banana', 'cherry'] dan cetak hasilnya
// TODO: Gunakan getLast pada [1.5, 2.5, 3.5] dan cetak hasilnya
// TODO: Gunakan repeat untuk membuat list berisi 'Hi' yang diulang 4 kali, lalu cetak list tersebut
// TODO: Gunakan repeat untuk membuat list berisi 7 yang diulang 3 kali, lalu cetak list tersebut
// TODO: Gunakan printPair dengan 'Name' dan 42
// TODO: Gunakan printPair dengan 100 dan true
}
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