Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 Wrapper yang membungkus teks dengan awalan dan akhiran yang dapat dikonfigurasi. Class ini harus menyimpan string prefix dan suffix, serta method call()-nya harus menerima String text dan mengembalikan teks yang dibungkus dengan awalan dan akhiran tersebut.
    • Class Repeater yang mengulang teks sebanyak jumlah yang dapat dikonfigurasi. Class ini harus menyimpan bilangan bulat times, serta method call()-nya harus menerima String text dan mengembalikan teks yang diulang sebanyak jumlah tersebut, dengan pemisah spasi.
  • main.dart: Impor formatter-mu dan tunjukkan cara menggunakan object ini seperti fungsi:
    • Buat Wrapper dengan awalan '[' dan akhiran ']'
    • Buat Wrapper lain dengan awalan '***' dan akhiran '***'
    • Buat Repeater dengan nilai times sebesar 3
    • 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

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
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Dart online