Dart mendukung fungsi sebagai objek — artinya fungsi bisa disimpan dalam variabel, dikirim sebagai argumen, dan dikembalikan dari fungsi lain. Ini adalah fondasi dari pemrograman fungsional di Dart.
Untuk fungsi satu baris, gunakan arrow syntax => sebagai pengganti { return ...; }:
// Fungsi biasa
int tambah(int a, int b) {
return a + b;
}
// Versi arrow — lebih ringkas!
int tambah(int a, int b) => a + b;
// Contoh lain
String sapa(String nama) => 'Halo, $nama!';
bool isGenap(int n) => n % 2 == 0;
double luas(double p, double l) => p * l;
void main() {
print(tambah(3, 4)); // 7
print(sapa('Budi')); // Halo, Budi!
print(isGenap(10)); // true
}
Fungsi tanpa nama yang biasanya digunakan langsung sebagai argumen atau disimpan dalam variabel:
// Simpan fungsi dalam variabel
var cetakAngka = (int x) {
print(x);
};
cetakAngka(42); // 42
// Versi arrow
var kali2 = (int x) => x * 2;
print(kali2(5)); // 10
Dart mendukung pengiriman fungsi sebagai argumen ke fungsi lain:
void prosesAngka(int angka, int Function(int) operasi) {
int hasil = operasi(angka);
print('Hasil: $hasil');
}
void main() {
prosesAngka(5, (x) => x * x); // Hasil: 25
prosesAngka(10, (x) => x + 100); // Hasil: 110
prosesAngka(7, (x) => x * 2); // Hasil: 14
}
List di Dart memiliki banyak metode yang menerima fungsi sebagai argumen:
List<int> angka = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// forEach — lakukan sesuatu untuk setiap elemen
angka.forEach((x) => print(x));
// map — transformasi setiap elemen (hasilnya Iterable)
List<int> dikali2 = angka.map((x) => x * 2).toList();
print(dikali2); // [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
// where — filter elemen yang memenuhi kondisi
List<int> genap = angka.where((x) => x % 2 == 0).toList();
print(genap); // [2, 4, 6, 8, 10]
// reduce — gabungkan semua elemen menjadi satu nilai
int total = angka.reduce((a, b) => a + b);
print(total); // 55
// any — cek apakah ada minimal satu yang memenuhi kondisi
bool adaLebihDari5 = angka.any((x) => x > 5);
print(adaLebihDari5); // true
// every — cek apakah semua memenuhi kondisi
bool semuaPositif = angka.every((x) => x > 0);
print(semuaPositif); // true
Fungsi yang "mengingat" variabel dari scope di sekitarnya:
Function buatCounter() {
int hitung = 0; // variabel ini 'ditangkap' oleh closure
return () {
hitung++;
print('Counter: $hitung');
};
}
void main() {
var counter = buatCounter();
counter(); // Counter: 1
counter(); // Counter: 2
counter(); // Counter: 3
// Variabel hitung tetap hidup karena ditangkap closure
}
| Bentuk | Contoh | Kapan digunakan |
|---|---|---|
| Fungsi biasa | int f(int x) { return x; } |
Fungsi umum dengan nama |
| Arrow function | int f(int x) => x * 2; |
Fungsi satu ekspresi |
| Anonymous function | (int x) { return x; } |
Argumen fungsi |
| Lambda arrow | (int x) => x * 2 |
Argumen fungsi ringkas |
💡 Tips: Metode functional pada List seperti
.map(),.where(), dan.reduce()sangat powerful dan idiomatik dalam Dart/Flutter — biasakan menggunakannya daripada loop manual untuk transformasi data. Arrow function=>hanya cocok untuk ekspresi tunggal — jangan dipaksakan untuk logika multi-baris. 🚀
Kursus
Dart Dasar
Kategori
Fungsi
Durasi Pelajaran
20 menit