Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 Wrapper yang membungkus teks dengan awalan dan akhiran. Class ini harus menyimpan String prefix dan String suffix, lalu saat dipanggil dengan parameter String text, mengembalikan teks yang dibungkus di antara awalan dan akhiran tersebut.
    • Class Repeater yang mengulang teks beberapa kali. Class ini harus menyimpan nilai int times, lalu saat dipanggil dengan parameter String text, mengembalikan teks yang diulang sebanyak nilai tersebut, dengan spasi di antara setiap pengulangan.
  • main.dart: Impor formatter-mu dan tunjukkan cara kerja class yang bisa dipanggil:
    • Buat Wrapper dengan awalan "[" dan akhiran "]"
    • Buat Wrapper lainnya dengan awalan "***" dan akhiran "***"
    • Buat Repeater yang 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

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
  
}
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