fungsifunctiondasarPemula5 mnt baca

Fungsi di Dart

Membungkus logika jadi fungsi yang bisa dipakai ulang: parameter, return value, dan arrow syntax.

Fungsi: mesin kecil yang bisa dipakai ulang

Fungsi adalah blok kode bernama yang mengerjakan satu tugas. Daripada menulis logika yang sama berulang-ulang, tulis sekali sebagai fungsi lalu panggil kapan pun dibutuhkan.

dart
void sapa() {
  print('Halo, selamat datang!');
}

void main() {
  sapa();
  sapa();
}

Kata void berarti fungsi ini tidak mengembalikan nilai, hanya mengerjakan sesuatu (di sini mencetak teks).

Fungsi dengan return value

Kebanyakan fungsi menghasilkan sesuatu untuk dipakai pemanggilnya:

dart
int tambah(int a, int b) {
  return a + b;
}

void main() {
  int hasil = tambah(5, 3);
  print(hasil); // 8
  print(tambah(10, 20)); // 30, bisa langsung dipakai
}

int di depan nama fungsi menyatakan tipe nilai yang dikembalikan. return mengirim nilainya keluar dan menghentikan fungsi.

Parameter dan argumen

Nilai yang masuk ke fungsi disebut parameter (di definisi) dan argumen (saat dipanggil):

dart
String sapaNama(String nama, int umur) {
  return 'Halo $nama, umurmu $umur tahun.';
}

void main() {
  print(sapaNama('Rizky', 17));
}

Jumlah dan tipe argumen harus cocok dengan parameter. sapaNama('Rizky') tanpa umur akan error.

Arrow syntax untuk fungsi pendek

Fungsi yang badannya cuma satu ekspresi bisa ditulis super ringkas:

dart
int kaliDua(int x) => x * 2;
bool isGenap(int x) => x % 2 == 0;

void main() {
  print(kaliDua(7));  // 14
  print(isGenap(7));  // false
}

Tanda => artinya "kembalikan hasil ekspresi ini". Tidak perlu kurung kurawal dan return. Sangat populer di Flutter untuk callback pendek.

Scope: variabel hanya hidup di rumahnya

dart
void main() {
  String pesan = 'dari main';

  void cetak() {
    String lokal = 'dari cetak';
    print(pesan); // boleh: baca variabel luar
    print(lokal);
  }

  cetak();
  // print(lokal); // ERROR: lokal tidak dikenal di sini
}

Variabel yang dibuat di dalam fungsi hanya dikenal di dalam fungsi itu. Ini disebut scope. Aturannya sederhana: kode di dalam bisa melihat keluar, tapi kode di luar tidak bisa melihat ke dalam.

Catatan teknis: Setiap fungsi sebaiknya mengerjakan satu hal saja. Kalau sebuah fungsi sudah lebih dari 20-30 baris atau namanya pakai kata "dan" (mis. hitungDanCetakDanSimpan), itu tanda harus dipecah jadi beberapa fungsi kecil. Fungsi kecil lebih gampang dites dan dibaca.

Fungsi sebagai nilai

Di Dart, fungsi adalah first-class citizen: bisa disimpan di variabel dan dioper ke fungsi lain.

dart
int tambah(int a, int b) => a + b;

void main() {
  var operasi = tambah; // fungsi disimpan di variabel
  print(operasi(4, 5)); // 9

  var angka = [1, 2, 3, 4];
  var genap = angka.where((x) => x % 2 == 0);
  print(genap.toList()); // [2, 4]
}

Fungsi tanpa nama seperti (x) => x % 2 == 0 disebut anonymous function atau lambda. Pola ini muncul di mana-mana di Dart dan Flutter, jadi biasakan membacanya dari sekarang.