Bab Delegate Dasar mendeklarasikan tipe kustom LaporanHandler hanya untuk satu kebutuhan. Dalam proyek nyata, pola “method tanpa return” dan “method dengan return” muncul berulang-ulang, dan mendeklarasikan delegate baru untuk setiap pola membuat kode membengkak. .NET menyediakan tiga tipe delegate generik siap pakai yang menutup kebutuhan itu: Action, Func, dan Predicate.
Tiga Tipe Bawaan .NET #
| Tipe | Bentuk | Dipakai untuk |
|---|---|---|
Action<T> | menerima argumen, tanpa return | mencetak, mengirim notifikasi |
Func<T, TResult> | argumen terakhir adalah return type | menghitung, mengubah data |
Predicate<T> | satu argumen, return bool | menguji syarat |
Ketiganya generik, sehingga tipe parameter ditulis di dalam kurung sudut. Ketiga tipe juga tersedia dalam banyak overload aritas: Action dari tanpa parameter hingga 16 parameter, dan Func dari tanpa parameter hingga 16 argumen plus satu return type. Predicate sengaja hanya satu bentuk karena syarat memang paling sering menguji satu item. Kita cukup menugaskan method group yang cocok tanpa mendeklarasikan tipe delegate baru.
Contoh Daftar Belanja #
List<string> daftarBelanja = new() { "Beras 5 kg", "Gula pasir", "Minyak goreng*" };
static void TampilkanItem(string item) => Console.WriteLine($"- {item}");
static int HitungKarakter(string item) => item.Length;
static bool PerluDibeli(string item) => item.EndsWith('*');
Action<string> tampilkan = TampilkanItem;
Func<string, int> hitungKarakter = HitungKarakter;
Predicate<string> perluDibeli = PerluDibeli;
foreach (string item in daftarBelanja)
{
if (perluDibeli(item))
{
tampilkan($"{item} ({hitungKarakter(item)} karakter)");
}
}Output yang Dihasilkan:
- Minyak goreng* (14 karakter)Bedah Kode Baris per Baris #
Mari kita telaah kode di atas:
- Baris 1: Tiga item belanja menjadi data uji; tanda bintang menandai item yang harus dibeli.
- Baris 3-5: Tiga method dengan tiga bentuk berbeda: tanpa return, dengan return
int, dan dengan returnbool. - Baris 7-9: Compiler mengonversi setiap method group ke tipe delegate bawaan yang cocok. Tidak ada deklarasi
delegatebaru di seluruh kode. - Baris 13:
perluDibeli(item)diuji seperti pemanggilan method biasa, karenaPredicate<T>memang merepresentasikan sebuah syarat. - Baris 15:
tampilkanmencetak baris hasil, sementarahitungKaraktermenghitung panjang string di dalam interpolasi.
Perhatikan pembagian perannya: perluDibeli menjawab pertanyaan ya atau tidak, hitungKarakter mengubah data menjadi angka, dan tampilkan melakukan efek samping pencetakan. Membiasakan Action untuk efek samping, Func untuk data, dan Predicate untuk keputusan membuat alur kode belanja semacam ini mudah dibaca ulang oleh rekan tim.