Dart - 6. Function Part 2



Parameter Opsional

update 07/04/2020, source code di github

Pada pemrograman dart, fungsi bisa memiliki parameter yang bersifat opsional, Opsional Parameter adalah parameter yang boleh ada atau tidak pada saat pemanggilan fungsi. optional parameter juga bisa berisi nilai default, sehingga jika nilai tidak diberikan pada saat fungsi dipanggil, maka fungsi tersebut akan menggunakan nilai default tersebut. Opsional Parameter sangat berguna dalam membuat fungsi lebih flexibel.

Positional Optional Parameters

Posisitional Optional Parameter didefenisikan menggunakan kurung siku [] pada saat membuat fungsi, sebagai contoh, perhatikan fungsi cetakPesan() berikut ini:

void cetakPesan(String pesan, [int counter]) {
  if(counter != null) {
    for(int i=0; i < counter; i++) {
      print(pesan);
    }
  } else {
    print(pesan);
  }
}

cara pemanggilannya adalah sebagai berikut

cetakPesan("Hello Dart"); // tidak mengisi parameter optional
cetakPesan("Hello Dart", 2); // mengisi counter dengan 2

operator != digunakan untuk mengecek apakah optional parameter counter diberikan, jika tidak diberikan maka optional parameter akan berisi nilai null. berikut ini adalah contoh optional parameter dengan nilai default.

void cetakPesan(String pesan, [int counter = 1]) {
  for(int i=0; i < counter; i++) {
    print(pesan);
  }
}

cara pemanggilannya adalah sebagai berikut:

cetakPesan("Hello Dart"); // tanpa mengisi optional parameter nilai counter menjadi 1 (menggunakan nilai default)
cetakPesan("Hello Dart", 5); // counter = 5, "Hello Dart" akan dicetak sebanyak 5 kali.

pada contoh tersebut, tidak diperlukan lagi pengecekan nilai dengan if, karena jika nilai tidak diberikan, maka fungsi tersebut akan memakai nilai default yaitu 1. optional parameter bisa kita buat lebih dari satu, untuk membuat optional parameter lebih dari satu kita gunakan koma "," sebagai pembatas optional parameter. perhatikan contoh berikut:

void cetakPesan(String pesan, [int counter = 1, String akhirPesan=""]) {
  for(int i=0; i < counter; i++) {
    print(pesan + akhirPesan);
  }
}

cara pemanggilannya adalah sebagai berikut:

cetakPesan("Hello Dart");
cetakPesan("Hello Dart", 2);
cetakPesan("Hello Dart", 2, "Dart Hebat");

pemanggilan yang salah

cetakPesan("Hello Dart", "Dart Hebat"); // ILLEGAL - tidak sesuai urutan parameter
cetakPesan("Hello Dart", "Dart Hebat", 2); // ILLEGAL - tidak sesuai urutan parameter

Named Optional Parameter

Named Optional Parameter sangat mirip dengan positional optional parameter, perbedaannya adalah pada saat pendeklarasian dan pemanggilan fungsinya, pada saat fungsi ini dipanggil, urutan dari parameter tidak menjadi masalah seperti pada fungsi positional optional parameter. Named Optional Parameter didefenisikan menggunakan kurung kurawal {} dan titik dua ":" untuk memberikan nilai defaultnya, jika ingin membuat paramter lebih dari satu, dapat digunakan koma "," sebagai pemisah parameter. Jika nilai pada named optional parameter tidak diberikan, maka nilai null akan diberikan secara otomatis. perhatikan contoh berikut ini:

void cetakPesan(String pesan, {int counter:1, String akhirPesan:""}) {
  for(int i=0; i < counter; i++) {
    print(pesan + akhirPesan);
  }
}

cara pemanggilannya adalah sebagai berikut:

cetakPesan("Hello Dart"); // OK
cetakPesan("Hello Dart", counter:2, akhirPesan:"!"); // OK
cetakPesan("Hello Dart", counter:2); // OK
cetakPesan("Hello Dart", akhirPesan: "!"); // OK, walaupun tidak berurutan
cetakPesan("Hello Dart", akhirPesan: "!", counter: 2); // OK, walaupun tidak sesuai urutan

Hal yang perlu diperhatikan adalah pada saat pemanggilan fungsi, kita harus menggetikkan nama parameter beserta nilainya.

Fungsi sebagai First-Class Citizens

Ketika dalam suatu bahasa pemrograman mendukung fungsi sebagai First-Class Citizens, artinya adalah sebagai berikut:
  1. Fungsi dapat diacu (referred) menggunakan namanya didalam program.
  2. Fungsi dapat digunakan sebagai argumen ke fungsi lainnya.
  3. Fungsi dapat dikembalikan sebagai hasil dari fungsi lainnya.
  4. Fungsi dapat digunakan dalam struktur data / Collections.
Empat hal tersebut didukung dalam pemrograman Dart, fungsi dalam dart tidak hanya dipanggil saja tetapi dapat juga dijadikan nilai argumen fungsi lainnya, perhatikan contoh berikut:

void cetakPesan(String pesan, modifPesan) {
  print(modifPesan(pesan));
}

String myModif(String pesan) => pesan + " modifed !";

void main() {
  cetakPesan("Hello", myModif);
}

Dari contoh tersebut bisa kita uraikan sebagai berikut:
Pada saat pemanggilan cetakPesan("Hello", myModif);

  1. Maka parameter cetakPesan akan mengacu ke fungsi myModif, dimana fungsi ini memiliki 1 buah parameter.
  2. Sehinga perintah modifPesan(pesan) dapat diterjemahkan menjadi myModif("Hello"), dimana hasilnya adalah "Hello modified !".
  3. Dengan demikan print(modifPesan("Hello") akan mengacu print(myModif("Hello")), dimana hasil dari myModif("Hello") adalah Hello modified !.
  4. Sehingga dapat juga menjadi print("Hello modified !") oleh fungsi cetakPesan. 

Fungsi didalam Fungsi


Dalam pemrograman dart, fungsi dapat juga dideklarasikan dalam fungsi lainnya, perhatikan contoh berikut:

void cetakPesan(String pesan, modifPesan) {
  print(modifPesan(pesan));
}

String myModif(String pesan) => pesan + " modifed !";

void main() {
  cetakPesan("Hello", myModif);
  cetakPesan("Hello", (String s) => s.toUpperCase()); // anonymous fungsi
}

jika kita perhatikan potongan kode

(String s) => s.toUpperCase()

Sepintas ini cukup membingungkan, untuk mengerti anonymous fungsi, cukup mudah, perhatikan contoh berikut:

String capital (String s) => s.toUpperCase(); // fungsi capital

Untuk membuatnya menjadi anonymous fungsi, cukup menghapus nama fungsinya menjadi:

(String s) => s.toUpperCase();

Download Source Code
Dart - 6. Function Part 2 Dart - 6. Function Part 2 Reviewed by jc on June 13, 2019 Rating: 5

No comments:

Powered by Blogger.