dartfungsiparameterPemula4 mnt baca

Parameter Named & Optional

Parameter opsional positional, named, required, dan default value.

Parameter yang fleksibel

Fungsi dasar selalu butuh semua argumen dalam urutan tepat. Tapi dunia nyata tidak sekaku itu: saat memesan kopi kamu cukup bilang "kopi susu", tanpa menyebut gula, es, dan ukuran setiap kali karena ada nilai default. Dart menyediakan tiga jenis parameter fleksibel: optional positional, named, dan default value.

Analogi: parameter biasa itu seperti formulir wajib isi semua kolom berurutan. Named parameter itu seperti memesan lewat aplikasi: kamu pilih kolom mana yang diisi, urutannya bebas, dan yang tidak dipilih pakai nilai standar.

Kenapa parameter fleksibel ada?

Karena fungsi dengan banyak parameter jadi mimpi buruk kalau semuanya wajib dan positional. Bayangkan buatUser(nama, umur, kota, pekerjaan, hobi, ...) dengan 8 argumen berurutan, salah urut sedikit langsung bug. Named parameter membuat pemanggilan jelas: buatUser(nama: 'Budi', kota: 'Jakarta').

Optional positional: boleh dikosongkan

Bungkus parameter dengan kurung siku []:

dart
String sapa(String nama, [String? sapaan]) {
  if (sapaan != null) {
    return '$sapaan, $nama!';
  }
  return 'Halo, $nama!';
}

void main() {
  print(sapa('Budi')); // Halo, Budi!
  print(sapa('Ani', 'Selamat pagi')); // Selamat pagi, Ani!
}

Parameter opsional bertipe nullable (String?) karena saat tidak diisi nilainya null. Ia tetap positional: kalau diisi, harus sesuai urutan.

Named parameter: panggil dengan nama

Bungkus dengan kurung kurawal {}, panggil dengan nama::

dart
String buatProfil({required String nama, int umur = 0, String kota = 'Jakarta'}) {
  return '$nama, $umur tahun, tinggal di $kota';
}

void main() {
  print(buatProfil(nama: 'Budi'));
  // Budi, 0 tahun, tinggal di Jakarta

  print(buatProfil(nama: 'Ani', umur: 25, kota: 'Bandung'));
  // Ani, 25 tahun, tinggal di Bandung

  // Urutan bebas!
  print(buatProfil(kota: 'Surabaya', nama: 'Cici', umur: 30));
}

Tiga kata kunci penting:

  • required: wajib diisi pemanggil, tidak boleh absen.
  • Nilai default (= 0, = 'Jakarta'): dipakai kalau pemanggil tidak mengisi.
  • Tanpa keduanya, parameter menjadi nullable opsional.

Contoh kedua, pola yang sangat umum di Flutter:

dart
void tampilkanKartu({required String judul, String isi = '-', bool penting = false}) {
  var tanda = penting ? '[PENTING] ' : '';
  print('$tanda$judul: $isi');
}

void main() {
  tampilkanKartu(judul: 'Tugas');
  tampilkanKartu(judul: 'Ujian', isi: 'Besok jam 8', penting: true);
}

Perhatikan betapa jelasnya pemanggilan kedua dibanding versi positional tampilkanKartu('Ujian', 'Besok jam 8', true) yang memaksa pembaca menebak arti true.

Kesalahan umum pemula

1. Named parameter tanpa nama saat memanggil

dart
// SALAH
String buatProfil({required String nama}) => nama;

void main() {
  // print(buatProfil('Budi')); // ERROR: harus pakai nama:
}
dart
// BENAR
void main() {
  print(buatProfil(nama: 'Budi'));
}

2. Lupa required lalu kaget dapat null

dart
// SALAH: nama bisa null tanpa disadari
String sapa({String? nama}) => 'Halo, $nama';

void main() {
  print(sapa()); // Halo, null  <- jelek!
}
dart
// BENAR: tandai required kalau memang wajib
String sapa({required String nama}) => 'Halo, $nama';

void main() {
  print(sapa(nama: 'Budi')); // Halo, Budi
}

3. Mencampur positional setelah optional

dart
// SALAH: parameter wajib tidak boleh setelah opsional
// void contoh([String? a], String b) {} // ERROR
dart
// BENAR: yang wajib dulu, baru opsional
void contoh(String b, [String? a]) {
  print('$b $a');
}

Kesimpulan

Optional positional [] untuk 1-2 parameter tambahan yang jarang dipakai, named {} untuk fungsi dengan banyak opsi agar pemanggilan jelas. Di Flutter, named parameter dengan required adalah pola sehari-hari untuk widget.

Catatan teknis: Named parameter tanpa required dan tanpa default menjadi nullable. Ini salah satu tempat null safety Dart paling terasa: compiler memaksamu memutuskan sejak awal mana yang wajib dan mana yang boleh kosong.

Tantangan

Fungsi profil fleksibel

Buat fungsi profil dengan named parameter: nama (required), kota (default "Jakarta"), umur (optional). Cetak kalimat profil. Panggil 3x dengan variasi berbeda.

text
// TODO: fungsi profil

void main() {
  // TODO: 3 panggilan berbeda
}