Class yang Dapat Dipanggil
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 84 dari 110.
Di Dart, kamu bisa membuat instance dari class dapat dipanggil seperti fungsi dengan mengimplementasikan method call(). Dengan begitu, kamu bisa menggunakan object dengan sintaks pemanggilan fungsi, yaitu menggunakan tanda kurung langsung pada instance.
class Multiplier {
final int factor;
Multiplier(this.factor);
int call(int value) {
return value * factor;
}
}
void main() {
var double = Multiplier(2);
var triple = Multiplier(3);
print(double(5)); // 10 - memanggil object seperti fungsi
print(triple(5)); // 15
}Saat kamu menulis double(5), Dart secara otomatis memanggil method call() dengan 5 sebagai argumen. Object tersebut berperilaku seperti fungsi sekaligus mempertahankan statusnya (field factor).
method call() dapat memiliki signature apa pun, beberapa parameter, parameter opsional, atau bahkan mengembalikan tipe yang berbeda:
class Greeter {
final String greeting;
Greeter(this.greeting);
String call(String name, {String punctuation = '!'}) {
return '$greeting, $name$punctuation';
}
}
void main() {
var hello = Greeter('Hello');
print(hello('Alice')); // Hello, Alice!
print(hello('Bob', punctuation: '.')); // Hello, Bob.
}class yang dapat dipanggil berguna saat kamu membutuhkan perilaku seperti fungsi yang dipadukan dengan state atau konfigurasi. class ini umum digunakan untuk membuat operasi, validator, atau transformasi yang dapat digunakan kembali dan perlu mengingat pengaturan di antara pemanggilan.
Tantangan
MudahMari kita buat sistem pemformat teks menggunakan class yang bisa dipanggil! Kamu akan membuat object yang bisa dipanggil seperti fungsi untuk mengubah teks dengan berbagai cara, sambil mempertahankan pengaturan konfigurasinya sendiri.
Kamu akan mengatur kodemu dalam dua file:
formatters.dart: Buat dua class yang bisa dipanggil untuk mengubah teks:- Class
Wrapperyang membungkus teks dengan awalan dan akhiran. Class ini harus menyimpanString prefixdanString suffix, lalu saat dipanggil dengan parameterString text, mengembalikan teks yang dibungkus di antara awalan dan akhiran tersebut. - Class
Repeateryang mengulang teks beberapa kali. Class ini harus menyimpan nilaiint times, lalu saat dipanggil dengan parameterString text, mengembalikan teks yang diulang sebanyak nilai tersebut, dengan spasi di antara setiap pengulangan.
- Class
main.dart: Impor formatter-mu dan tunjukkan cara kerja class yang bisa dipanggil:- Buat
Wrapperdengan awalan"["dan akhiran"]" - Buat
Wrapperlainnya dengan awalan"***"dan akhiran"***" - Buat
Repeateryang mengulang teks sebanyak 3 kali - Panggil wrapper pertama dengan
"Hello"dan cetak hasilnya - Panggil wrapper kedua dengan
"Important"dan cetak hasilnya - Panggil repeater dengan
"Go"dan cetak hasilnya - Terakhir, gabungkan keduanya: panggil wrapper pertama dengan hasil pemanggilan repeater menggunakan
"Dart", lalu cetak hasilnya
- Buat
Perhatikan bagaimana setiap object formatter mengingat konfigurasinya dan bisa langsung dipanggil dengan tanda kurung, seperti fungsi!
Output yang diharapkan:
[Hello]
***Important***
Go Go Go
[Dart Dart Dart]Coba sendiri
import 'formatters.dart';
void main() {
// TODO: Buat Wrapper dengan awalan "[" dan akhiran "]"
// TODO: Buat Wrapper lain dengan awalan "***" dan akhiran "***"
// TODO: Buat Repeater yang mengulang 3 kali
// TODO: Panggil wrapper pertama dengan "Hello" dan cetak hasilnya
// TODO: Panggil wrapper kedua dengan "Important" dan cetak hasilnya
// TODO: Panggil repeater dengan "Go" dan cetak hasilnya
// TODO: Gabungkan keduanya: panggil wrapper pertama dengan hasil dari
// pemanggilan repeater dengan "Dart", lalu cetak hasilnya
}
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 Generik13Konsep OOP Lanjutan
Komposisi vs PewarisanExtension methodClass yang Dapat DipanggilSealed class (Dart 3)Records (Dart 3)Pola dan Pencocokan (3.0)Enum dengan method2Konstruktor 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