Menu
CoddyTech

Metode Generik

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 66 dari 110.

Sama seperti class yang dapat bersifat generik, setiap method juga dapat memiliki parameter tipe sendiri. Ini berguna saat kamu membutuhkan method yang fleksibel tanpa membuat seluruh class menjadi generik.

Metode generik mendeklarasikan parameter tipenya sebelum tipe nilai kembali:

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 int

Metode generik sangat berguna di dalam class saat hanya operasi tertentu yang memerlukan 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 data disimpulkan sebagai int
  
  var copies = printer.duplicate('Hi', 3);
  print(copies);  // [Hi, Hi, Hi]
}

Metode generik memberimu kendali yang lebih terperinci atas keamanan tipe pada tingkat metode, sehingga class tetap lebih sederhana dan kamu tetap mendapat manfaat dari pemeriksaan tipe saat kompilasi.

challenge icon

Tantangan

Mudah

Mari buat utilitas transformasi data yang menunjukkan kekuatan method generik. Kamu akan membuat class Transformer dengan method yang dapat bekerja dengan tipe apa pun, sehingga kamu mendapat fleksibilitas tanpa menjadikan seluruh class generik.

Kamu akan mengatur kodemu ke dalam dua file:

  • transformer.dart: Buat class Transformer dengan method generik berikut:
    • T getFirst<T>(List<T> items): mengembalikan elemen pertama dari list
    • T getLast<T>(List<T> items): mengembalikan elemen terakhir dari list
    • List<T> repeat<T>(T item, int times): membuat list yang berisi item yang diulang sebanyak jumlah yang ditentukan
    • void printPair<A, B>(A first, B second): mencetak dua nilai dengan format Pair: [first] and [second]
  • main.dart: Impor file transformer-mu dan tunjukkan setiap method generik dengan tipe yang berbeda:
    • Buat instance Transformer
    • Gunakan getFirst pada [10, 20, 30] lalu cetak hasilnya
    • Gunakan getFirst pada ['apple', 'banana', 'cherry'] lalu cetak hasilnya
    • Gunakan getLast pada [1.5, 2.5, 3.5] lalu cetak hasilnya
    • Gunakan repeat untuk membuat list berisi 'Hi' yang diulang sebanyak 4 kali, lalu cetak hasilnya
    • Gunakan repeat untuk membuat list berisi 7 yang diulang sebanyak 3 kali, lalu cetak hasilnya
    • Gunakan printPair dengan 'Name' dan 42
    • Gunakan printPair dengan 100 dan true

Perhatikan bagaimana setiap method mendeklarasikan parameter tipenya sendiri, sehingga object Transformer yang sama dapat bekerja dengan bilangan bulat, string, bilangan desimal, dan nilai boolean, semuanya dengan keamanan tipe 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 true

Coba 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' sebanyak 4 kali dan cetak list tersebut

  // TODO: Gunakan repeat untuk membuat list berisi 7 sebanyak 3 kali dan cetak list tersebut

  // TODO: Gunakan printPair dengan 'Name' dan 42

  // TODO: Gunakan printPair dengan 100 dan true
}
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