Arrow Function & Anonymous Function

Arrow Function & Anonymous Function ➡️

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.


Arrow Function (=>)

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
}

Anonymous Function (Lambda)

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

Fungsi sebagai Parameter (Higher-Order Function)

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
}

Fungsi Bawaan pada List

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

Closure

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
}

Ringkasan

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. 🚀

Sebelumnya

Informasi Kursus

Kursus

Dart Dasar

Kategori

Fungsi

Durasi Pelajaran

20 menit

Pelajaran dalam Kategori Ini