Jawaban:
Dart memiliki dua jenis parameter opsional: bernama dan posisional . Sebelum saya membahas perbedaannya, izinkan saya terlebih dahulu membahas persamaannya.
Parameter opsional Dart adalah opsional karena penelepon tidak diharuskan menentukan nilai parameter saat memanggil fungsi.
Parameter opsional hanya dapat dinyatakan setelah parameter yang diperlukan.
Parameter opsional dapat memiliki nilai default, yang digunakan ketika penelepon tidak menentukan nilai.
Parameter opsional posisi
Parameter yang dibungkus oleh [ ]
adalah parameter opsional posisi. Berikut ini sebuah contoh:
getHttpUrl(String server, String path, [int port=80]) {
// ...
}
Dalam kode di atas, port
bersifat opsional dan memiliki nilai default 80
.
Anda dapat menelepon getHttpUrl
dengan atau tanpa parameter ketiga.
getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
Anda dapat menentukan beberapa parameter posisi untuk suatu fungsi:
getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
// ...
}
Parameter opsional bersifat posisional di mana Anda tidak dapat menghilangkan port
jika Anda ingin menentukan numRetries
.
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);
Tentu saja, kecuali Anda tahu apa 8080 dan 5, sulit untuk mengatakan apa angka-angka ajaib itu. Anda dapat menggunakan parameter opsional bernama untuk membuat API lebih mudah dibaca.
Dinamai parameter opsional
Parameter yang dibungkus oleh { }
adalah parameter opsional bernama. Berikut ini sebuah contoh:
getHttpUrl(String server, String path, {int port = 80}) {
// ...
}
Anda dapat menelepon getHttpUrl
dengan atau tanpa parameter ketiga. Anda harus menggunakan nama parameter saat memanggil fungsi.
getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
Anda dapat menentukan beberapa parameter bernama untuk suatu fungsi:
getHttpUrl(String server, String path, {int port = 80, int numRetries = 3}) {
// ...
}
Karena parameter bernama direferensikan oleh nama, mereka dapat digunakan dalam urutan yang berbeda dari deklarasi mereka.
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', port: 8080);
getHttpUrl('example.com', '/index.html', port: 8080, numRetries: 5);
getHttpUrl('example.com', '/index.html', numRetries: 5, port: 8080);
getHttpUrl('example.com', '/index.html', numRetries: 5);
Saya percaya parameter bernama membuat situs panggilan lebih mudah dipahami, terutama ketika ada boolean flag atau nomor di luar konteks.
Memeriksa apakah parameter opsional disediakan
Sayangnya, Anda tidak dapat membedakan antara case "parameter opsional tidak disediakan" dan "parameter opsional diberikan dengan nilai default".
Catatan: Anda dapat menggunakan parameter opsional posisi atau parameter opsional bernama, tetapi tidak keduanya dalam fungsi atau metode yang sama. Berikut ini tidak dibolehkan.
thisFunctionWontWork(String foo, [String positonal], {String named}) {
// will not work!
}
Di Dart dengan pemahaman saya, parameter metode dapat diberikan dalam dua jenis.
>> Parameter yang Diperlukan
Parameter yang diperlukan adalah parameter gaya lama yang sudah kita ketahui
contoh :
findVolume(int length, int breath, int height) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);
keluaran:
length = 10, breath = 20, height = 30
>> Parameter Posisi Opsional
parameter akan diungkapkan dengan kurung siku [] & parameter kurung siku adalah opsional.
contoh:
findVolume(int length, int breath, [int height]) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);//valid
findVolume(10,20);//also valid
keluaran:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null
>> Parameter Bernama Opsional
contoh:
findVolume(int length, int breath, {int height}) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,height:30);//valid & we can see the parameter name is mentioned here.
findVolume(10,20);//also valid
keluaran:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null
>> Parameter Default Opsional
contoh:
findVolume(int length, int breath, {int height=10}) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,height:30);//valid
findVolume(10,20);//valid
keluaran:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken
terima kasih atas penjelasan jelas yang diberikan dari tautan video ini, kredit kepada pembuat video.
tautan video: Parameter OpsionalPositional
Ketika parameter fungsi ditentukan menggunakan sintaks "paramName: value", maka itu adalah parameter bernama. Parameter tersebut dapat dibuat opsional dengan melampirkannya di antara [dan] tanda kurung. Demonstrasi dasar dari fungsi ini dapat ditunjukkan dalam program Hello World berikut:
sayHello([String name = ' World!']) {
print('Hello, ${name}');
}
void main() {
sayHello('Govind');
}
Dari dokumen, kami mendapatkan bahwa keduanya positional
dan named
parameter bersifat opsional, yang berarti semuanya tidak ada.
Menurut pendapat saya, named
parameter lebih ketat daripada positional
yang. Misalnya, jika Anda mendeklarasikan metode seperti itu:
String say({String from, String msg})
Di atas from
dan msg
merupakan named
parameter, saat Anda memanggil metode say
yang harus Anda gunakan say(from: "xx", msg: "xx")
. Kunci tidak dapat absen.
Namun jika Anda menggunakan parameter posisi, Anda bebas.
Named
parameter disebut seperti itu karena Anda benar-benar dapat mengidentifikasinya berdasarkan nama dan bukan berdasarkan posisi (jika Anda mengganti posisi dua param yang bernama, tidak masalah). Lihat jawaban di atas dari Savaranaraja
Parameter Posisi:
Mereka sama dengan parameter default. Sebagai contoh:
void add(int x, [int y = 3]);
Di sini y memiliki nilai default 3
Parameter yang Dinamai:
Ini adalah parameter yang dapat dilewati dalam urutan apa pun dengan melewati nama parameter diikuti oleh nilai yang dikirimkan. Sebagai contoh:
void sum({int num1, int num2});
Fungsi ini disebut seperti ini:
sum(num1: 12, num2: 24);
Parameter yang dinamai juga dapat memiliki nilai default.