call() method
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 73 dari 110.
Dart memiliki method khusus bernama call() yang memungkinkan kamu menggunakan object seolah-olah sebagai fungsi. Saat sebuah class mendefinisikan method call(), kamu dapat memanggil instance dari class tersebut menggunakan sintaks pemanggilan fungsi.
class Multiplier {
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
}Daripada menulis double.call(5), kamu cukup menulis double(5). Dart otomatis memanggil method call() saat kamu menggunakan tanda kurung pada object.
method call() dapat menerima parameter apa pun dan mengembalikan tipe apa pun, sama seperti method biasa:
class Greeter {
String prefix;
Greeter(this.prefix);
String call(String name, {String punctuation = '!'}) {
return '$prefix, $name$punctuation';
}
}
void main() {
var hello = Greeter('Hello');
print(hello('Alice')); // Hello, Alice!
print(hello('Bob', punctuation: '?')); // Hello, Bob?
}Pola ini berguna saat kamu membutuhkan object yang berperilaku seperti fungsi, tetapi juga mempertahankan status atau konfigurasi. Pola ini umum digunakan untuk membuat operasi, validator, atau formatter yang dapat digunakan kembali dan perlu mengingat pengaturan di antara pemanggilan.
Tantangan
MudahMari buat sistem pemformat teks yang memungkinkan object formatter dipanggil langsung seperti fungsi! Kamu akan membuat class yang bisa dipanggil dan mengubah teks dengan berbagai cara sambil mempertahankan pengaturan konfigurasinya.
Kamu akan mengatur kodemu ke dalam dua file:
formatters.dart: Buat dua class yang bisa dipanggil dan mengubah string:- Class
Wrapperyang membungkus teks dengan awalan dan akhiran yang dapat dikonfigurasi. Class ini harus menyimpan stringprefixdansuffix, serta methodcall()-nya harus menerimaString textdan mengembalikan teks yang dibungkus dengan awalan dan akhiran tersebut. - Class
Repeateryang mengulang teks sebanyak jumlah yang dapat dikonfigurasi. Class ini harus menyimpan bilangan bulattimes, serta methodcall()-nya harus menerimaString textdan mengembalikan teks yang diulang sebanyak jumlah tersebut, dengan pemisah spasi.
- Class
main.dart: Impor formatter-mu dan tunjukkan cara menggunakan object ini seperti fungsi:- Buat
Wrapperdengan awalan'['dan akhiran']' - Buat
Wrapperlain dengan awalan'***'dan akhiran'***' - Buat
Repeaterdengan nilaitimessebesar3 - Panggil wrapper pertama dengan
'Hello'lalu cetak hasilnya - Panggil wrapper kedua dengan
'Important'lalu cetak hasilnya - Panggil repeater dengan
'Go'lalu cetak hasilnya - Tunjukkan chaining dengan meneruskan hasil wrapper pertama (dengan
'Nested') ke wrapper kedua, lalu cetak hasilnya
- Buat
Perhatikan bahwa kamu dapat memanggil object formatter secara langsung menggunakan tanda kurung, seperti fungsi biasa. Method call() memungkinkan hal ini, dan setiap object mengingat konfigurasinya di antara pemakaian!
Output yang diharapkan:
[Hello]
***Important***
Go Go Go
***[Nested]***Coba sendiri
import 'formatters.dart';
void main() {
// TODO: Buat Wrapper dengan prefix '[' dan suffix ']'
// TODO: Buat Wrapper lain dengan prefix '***' dan suffix '***'
// TODO: Buat Repeater dengan times diatur ke 3
// 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: Tunjukkan cara merangkai dengan meneruskan hasil wrapper pertama
// (dengan 'Nested') ke wrapper kedua, 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 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 Hewan11Metode Khusus
Override toString()Override hashCode & ==Antarmuka Comparablecall() methodOverride noSuchMethodRingkasan: Koleksi Kustom3Property 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