unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
Fungsi

Fungsi #

Fungsi adalah blok kode yang dapat digunakan kembali yang melakukan tugas tertentu. Dalam Dart, fungsi memainkan peran penting dalam pengorganisasian kode dan memungkinkan modularitas serta pengurangan pengulangan kode. Pemahaman mendalam tentang fungsi dalam Dart akan membantu Anda menulis kode yang lebih efisien, terstruktur, dan mudah dipelihara.

Dasar-dasar Fungsi #

Fungsi dalam Dart dideklarasikan menggunakan kata kunci void (jika fungsi tidak mengembalikan nilai) atau dengan tipe pengembalian (jika fungsi mengembalikan nilai).

Sintaks:

void namaFungsi() {
  // Kode yang dijalankan oleh fungsi
}

TipePengembalian namaFungsi() {
  // Kode yang dijalankan oleh fungsi
  return nilai;
}

Contoh:

void cetakPesan() {
  print("Halo, Dunia!");
}

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

void main() {
  cetakPesan(); // Memanggil fungsi cetakPesan
  int hasil = tambah(3, 4); // Memanggil fungsi tambah
  print(hasil); // Output: 7
}

Pada contoh di atas, cetakPesan adalah fungsi yang tidak mengembalikan nilai (void), sedangkan tambah adalah fungsi yang mengembalikan nilai int.

Parameter pada Fungsi #

Fungsi dalam Dart bisa memiliki parameter yang memungkinkan Anda mengirim nilai ke dalam fungsi saat memanggilnya. Ada beberapa jenis parameter yang didukung Dart: positional parameters, optional positional parameters, named parameters, dan default parameters.

Positional Parameters #

Positional parameters adalah parameter yang posisinya tetap dan harus diisi ketika memanggil fungsi.

Contoh:

void cetakNama(String nama, int umur) {
  print("Nama: $nama, Umur: $umur");
}

void main() {
  cetakNama("Alice", 25); // Output: Nama: Alice, Umur: 25
}

Optional Positional Parameters #

Optional positional parameters dideklarasikan menggunakan tanda kurung siku ([]). Parameter ini opsional, artinya tidak harus diisi ketika memanggil fungsi. Jika tidak diisi, nilainya akan null secara default atau sesuai dengan nilai default yang ditentukan.

Contoh:

void cetakNama(String nama, [int? umur]) {
  if (umur != null) {
    print("Nama: $nama, Umur: $umur");
  } else {
    print("Nama: $nama");
  }
}

void main() {
  cetakNama("Alice"); // Output: Nama: Alice
  cetakNama("Bob", 30); // Output: Nama: Bob, Umur: 30
}

Named Parameters #

Named parameters memberikan fleksibilitas lebih dalam pemanggilan fungsi karena Anda dapat menyebutkan nama parameter saat memanggil fungsi, sehingga urutan tidak penting. Named parameters dideklarasikan menggunakan tanda kurung kurawal ({}).

Contoh:

void cetakNama({required String nama, int? umur}) {
  if (umur != null) {
    print("Nama: $nama, Umur: $umur");
  } else {
    print("Nama: $nama");
  }
}

void main() {
  cetakNama(nama: "Alice"); // Output: Nama: Alice
  cetakNama(nama: "Bob", umur: 30); // Output: Nama: Bob, Umur: 30
}

Catatan: Kata kunci required digunakan untuk memastikan bahwa parameter tersebut harus diisi.

Default Parameters #

Anda bisa memberikan nilai default pada parameter optional. Jika nilai parameter tidak diisi saat pemanggilan fungsi, nilai default akan digunakan.

Contoh:

void cetakNama(String nama, {int umur = 18}) {
  print("Nama: $nama, Umur: $umur");
}

void main() {
  cetakNama("Alice"); // Output: Nama: Alice, Umur: 18
  cetakNama("Bob", umur: 25); // Output: Nama: Bob, Umur: 25
}

Fungsi Anonim dan Fungsi Panah #

Selain fungsi biasa, Dart juga mendukung fungsi anonim dan fungsi panah (arrow function), yang lebih ringkas dan sering digunakan dalam callback atau operasi sederhana.

Fungsi Anonim #

Fungsi anonim adalah fungsi yang tidak memiliki nama dan biasanya digunakan dalam konteks di mana fungsi perlu segera dideklarasikan dan dipanggil.

Contoh:

void main() {
  var daftarAngka = [1, 2, 3, 4, 5];
  daftarAngka.forEach((angka) {
    print(angka); // Output: 1, 2, 3, 4, 5
  });
}

Pada contoh di atas, fungsi anonim digunakan sebagai callback untuk forEach.

Fungsi Panah (Arrow Function) #

Fungsi panah adalah bentuk singkat dari fungsi biasa, terutama digunakan untuk fungsi yang memiliki satu ekspresi. Ini menggunakan tanda => sebagai pengganti return.

Contoh:

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

void main() {
  print(tambah(3, 4)); // Output: 7
}

Pada contoh di atas, tambah dideklarasikan sebagai fungsi panah yang mengembalikan hasil penjumlahan a dan b.

Fungsi sebagai First-Class Object #

Dalam Dart, fungsi adalah first-class object, yang berarti Anda bisa memperlakukan fungsi seperti nilai lain—misalnya, Anda bisa menyimpan fungsi dalam variabel, melewatkan fungsi sebagai argumen, atau mengembalikan fungsi dari fungsi lain.

Contoh:

int kaliDua(int x) => x * 2;

void main() {
  var f = kaliDua;
  print(f(5)); // Output: 10
}

Pada contoh di atas, fungsi kaliDua disimpan dalam variabel f dan kemudian dipanggil melalui variabel tersebut.

Fungsi Rekursif #

Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Fungsi ini berguna untuk menyelesaikan masalah yang dapat dipecah menjadi sub-masalah yang lebih kecil dan serupa, seperti menghitung faktorial atau memecahkan masalah pencarian dalam struktur data.

Contoh: Faktorial

int faktorial(int n) {
  if (n <= 1) {
    return 1;
  } else {
    return n * faktorial(n - 1);
  }
}

void main() {
  print(faktorial(5)); // Output: 120
}

Pada contoh di atas, fungsi faktorial memanggil dirinya sendiri hingga mencapai kondisi dasar (n <= 1).

Lexical Closure #

Dart mendukung konsep lexical closure, yang berarti fungsi dapat mengakses variabel dalam lingkup di mana fungsi tersebut didefinisikan, bahkan setelah lingkup itu tidak lagi aktif.

Contoh:

Function pembuatFungsiPenambah(int tambah) {
  return (int angka) => angka + tambah;
}

void main() {
  var tambahSepuluh = pembuatFungsiPenambah(10);
  print(tambahSepuluh(5)); // Output: 15
}

Pada contoh di atas, fungsi pembuatFungsiPenambah mengembalikan fungsi anonim yang dapat mengakses nilai tambah dari lingkup luarnya, meskipun pembuatFungsiPenambah sudah selesai dieksekusi.

Function Composition #

Function composition adalah teknik di mana Anda bisa menggabungkan beberapa fungsi untuk menciptakan fungsi baru yang lebih kompleks.

Contoh:

int kaliDua(int x) => x * 2;
int tambahTiga(int x) => x + 3;

int komposisiFungsi(int x) => kaliDua(tambahTiga(x));

void main() {
  print(komposisiFungsi(5)); // Output: 16
}

Pada contoh di atas, komposisiFungsi adalah hasil dari menggabungkan kaliDua dan tambahTiga.

Fungsi Generator #

Dart mendukung fungsi generator yang memungkinkan Anda menghasilkan serangkaian nilai secara bertahap menggunakan sync* dan yield untuk generator sinkron, atau async* dan yield untuk generator asinkron.

Contoh:

Iterable<int> generateNumbers(int n) sync* {
  for (int i = 0; i < n; i++) {
    yield i;
  }
}

void main() {
  var angka = generateNumbers(5);
  angka.forEach(print); // Output: 0, 1, 2, 3, 4
}

Pada contoh di atas, fungsi generator generateNumbers menghasilkan angka dari 0 hingga n-1 satu

per satu ketika diperlukan.

Kesimpulan #

Fungsi dalam Dart adalah komponen penting untuk menulis kode yang modular, reusable, dan mudah dipelihara. Dengan memahami berbagai jenis fungsi, parameter, dan konsep lanjutan seperti lexical closure dan function composition, Anda dapat menulis kode Dart yang lebih efisien dan ekspresif. Fungsi dalam Dart juga sangat fleksibel dengan dukungan untuk fungsi anonim, fungsi panah, dan fungsi sebagai objek first-class, memungkinkan penggunaan dan kombinasi fungsi yang sangat dinamis.

« Perulangan
Kelas »