typedef (alias tipe)

Definisi

Fungsi: Kata kunci typedef digunakan untuk membuat nama singkat bagi tipe data yang sudah ada, yang dikenal juga sebagai alias tipe. Dart versi 2.13 ke atas mendukung semua jenis tipe secara penuh; versi lama hanya bisa dipakai untuk tipe fungsi.

Sintaks: typedef Alias = TipeAsli;

Contoh: typedef IntList = List<int>;. Setelah dideklarasikan, kamu bisa langsung pakai IntList tanpa perlu tulis List<int>.

typedef IntList = List<int>;
IntList il = [1, 2, 3];Code language: Dart (dart)

Dukungan parameter generik

Alias tipe bisa menggunakan generik untuk menyederhanakan tipe gabungan yang rumit:

typedef ListMapper<X> = Map<X, List<X>>;Code language: Dart (dart)

ListMapper<String> sama persis dengan Map<String, List<String>>, kode jadi lebih ringkas dan mudah dibaca.

typedef ListMapper<X> = Map<X, List<X>>;
Map<String, List<String>> m1 = {}; // Penulisan standar yang panjang
ListMapper<String> m2 = {}; // Tipe sama, lebih pendek dan jelasCode language: Dart (dart)

Alias tipe fungsi

Kamu bisa membuat alias untuk signature fungsi agar format fungsi di seluruh kode menjadi seragam:

typedef Compare<T> = int Function(T a, T b);Code language: Dart (dart)

Semua fungsi dengan signature (T, T) → int termasuk tipe Compare<T>. Gunakan operator is untuk mengecek kecocokan tipe.

typedef Compare<T> = int Function(T a, T b);

int sort(int a, int b) => a - b;

void main() {
  assert(sort is Compare<int>); // Hasil pengecekan bernilai true
}
Code language: Dart (dart)

Contoh penggunaan nyata

// Deklarasikan alias tipe
typedef IntList = List<int>;
typedef StringMap = Map<String, dynamic>;

void main() {
  // Pakai alias secara langsung
  IntList nums = [10, 20, 30];
  StringMap info = {"name": "dart", "version": "2.18"};

  print(nums);
  print(info);
}Code language: JavaScript (javascript)
// Alias generik: kunci tipe X, nilai berupa daftar tipe X
typedef ListMapper<X> = Map<X, List<X>>;

void main() {
  // Penulisan asli yang panjang
  Map<String, List<String>> oldData = {
    "fruit": ["apple", "banana"]
  };

  // Penulisan singkat pakai typedef, tipe sama persis
  ListMapper<String> newData = {
    "fruit": ["apple", "banana"]
  };

  print(oldData);
  print(newData);
}Code language: Dart (dart)
// Alias fungsi generik: terima dua parameter T, kembalikan bilangan bulat
typedef Compare<T> = int Function(T a, T b);

// Fungsi yang cocok dengan Compare<int>
int intSort(int a, int b) => a - b;
// Fungsi yang cocok dengan Compare<String>
int strSort(String a, String b) => a.length - b.length;

void main() {
  // Validasi tipe saat program berjalan
  assert(intSort is Compare<int>);
  assert(strSort is Compare<String>);

  // Gunakan fungsi sebagai argumen
  List<int> arr = [5, 1, 3];
  arr.sort(intSort);
  print(arr); // Keluaran: [1, 3, 5]
}Code language: Dart (dart)

typedef (alias tipe)

Leave a Reply

Your email address will not be published. Required fields are marked *