Dart mendukung parameter opsional bernama dan parameter opsional posisional. Apa perbedaan antara keduanya?
Juga, bagaimana Anda bisa tahu apakah parameter opsional benar-benar ditentukan?
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!
}
=
bukan:
, menurut dartlang.org/guides/language/… .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 :
keluaran:
>> Parameter Posisi Opsional
parameter akan diungkapkan dengan kurung siku [] & parameter kurung siku adalah opsional.
contoh:
keluaran:
>> Parameter Bernama Opsional
contoh:
keluaran:
>> Parameter Default Opsional
contoh:
keluaran:
terima kasih atas penjelasan jelas yang diberikan dari tautan video ini, kredit kepada pembuat video.
tautan video: Parameter OpsionalPositional
tautan video: OptionalNamedParameters
tautan video: OptionalDefaultParameters
sumber
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:
sumber
Dari dokumen, kami mendapatkan bahwa keduanya
positional
dannamed
parameter bersifat opsional, yang berarti semuanya tidak ada.Menurut pendapat saya,
named
parameter lebih ketat daripadapositional
yang. Misalnya, jika Anda mendeklarasikan metode seperti itu:Di atas
from
danmsg
merupakannamed
parameter, saat Anda memanggil metodesay
yang harus Anda gunakansay(from: "xx", msg: "xx")
. Kunci tidak dapat absen.Namun jika Anda menggunakan parameter posisi, Anda bebas.
sumber
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 SavaranarajaParameter Posisi:
Mereka sama dengan parameter default. Sebagai contoh:
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:
Fungsi ini disebut seperti ini:
Parameter yang dinamai juga dapat memiliki nilai default.
sumber