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.
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:
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):
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:
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
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.
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.