Yanıtlar:
Dart'ın iki tür isteğe bağlı parametresi vardır: adlandırılmış ve konumsal . Farklılıkları tartışmadan önce, önce benzerlikleri tartışmama izin verin.
Dart'ın isteğe bağlı parametreleri isteğe bağlıdır , çünkü çağıranın işlevi çağırırken parametre için bir değer belirtmesi gerekmez.
İsteğe bağlı parametreler yalnızca gerekli parametrelerden sonra bildirilebilir.
İsteğe bağlı parametreler, arayan bir değer belirtmediğinde kullanılan varsayılan bir değere sahip olabilir.
Konumsal isteğe bağlı parametreler
Tarafından sarılmış bir parametre [ ]
konumsal isteğe bağlı bir parametredir. İşte bir örnek:
getHttpUrl(String server, String path, [int port=80]) {
// ...
}
Yukarıdaki kodda port
isteğe bağlıdır ve varsayılan değeri vardır 80
.
getHttpUrl
Üçüncü parametre ile veya üçüncü parametre olmadan çağrı yapabilirsiniz .
getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
Bir işlev için birden fazla konum parametresi belirtebilirsiniz:
getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
// ...
}
İsteğe bağlı parametreler, belirtmek isterseniz atlayamayacağınız şekilde konumlandırılmıştır .port
numRetries
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);
Tabii ki, 8080 ve 5'in ne olduğunu bilmiyorsanız, bu sihirli sayıların ne olduğunu söylemek zor. Daha okunabilir API'ler oluşturmak için adlandırılmış isteğe bağlı parametreleri kullanabilirsiniz .
Adlandırılmış isteğe bağlı parametreler
Tarafından sarılmış bir parametre { }
, adlandırılmış isteğe bağlı bir parametredir. İşte bir örnek:
getHttpUrl(String server, String path, {int port = 80}) {
// ...
}
getHttpUrl
Üçüncü parametre ile veya üçüncü parametre olmadan çağrı yapabilirsiniz . Sen gerekir işlevi çağrılırken parametre adı kullanın.
getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
Bir işlev için birden çok adlandırılmış parametre belirtebilirsiniz:
getHttpUrl(String server, String path, {int port = 80, int numRetries = 3}) {
// ...
}
Adlandırılmış parametrelere adla başvurulduğundan, bildirimlerinden farklı bir sırayla kullanılabilirler.
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);
İsimlendirilmiş parametrelerin, özellikle boole bayrakları veya bağlam dışı numaralar olduğunda, anlaşılması kolay arama sitelerini sağladığına inanıyorum.
İsteğe bağlı parametrenin sağlandığını kontrol etme
Ne yazık ki, "isteğe bağlı bir parametre sağlanmadı" ve "varsayılan değerle isteğe bağlı bir parametre sağlandı" durumlarını ayırt edemezsiniz.
Not: Konum isteğe bağlı parametreleri veya adlandırılmış isteğe bağlı parametreleri kullanabilirsiniz, ancak her ikisi de aynı işlev veya yöntemde kullanamazsınız . Aşağıdakilere izin verilmez.
thisFunctionWontWork(String foo, [String positonal], {String named}) {
// will not work!
}
Dart'da benim anlayışımla, yöntem parametresi iki tipte verilebilir.
>> Gerekli Parametre
Gerekli parametre, hepimizin bildiği eski stil parametresidir
örnek :
findVolume(int length, int breath, int height) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);
çıktı:
length = 10, breath = 20, height = 30
>> Opsiyonel Konumsal Parametre
parametre köşeli parantez [] ile açıklanacaktır & köşeli parantez parametresi isteğe bağlıdır.
misal:
findVolume(int length, int breath, [int height]) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);//valid
findVolume(10,20);//also valid
çıktı:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null
>> İsteğe Bağlı Adlandırılmış Parametre
misal:
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
çıktı:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null
>> Opsiyonel Varsayılan Parametre
misal:
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
çıktı:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken
Bu video bağlantısından verilen net açıklama için teşekkürler, video oluşturucuya teşekkür ederiz.
video bağlantısı: İsteğe bağlıPositionalParameters
Bir işlevin parametresi "paramName: value" sözdizimi kullanılarak belirtildiğinde, adlandırılmış bir parametredir. Bu parametreler, [ve] parantezler arasına alınarak isteğe bağlı hale getirilebilir. Bu fonksiyonun ilkel bir gösterimi aşağıdaki Hello World programında gösterilebilir:
sayHello([String name = ' World!']) {
print('Hello, ${name}');
}
void main() {
sayHello('Govind');
}
Gönderen doc ikimizin de bunu almak positional
ve named
parametreler hepsi mevcut olmayabilir anlamına gelir isteğe bağlıdır.
Benim düşünceme göre, named
parametreler daha katıdır positional
. Örneğin, böyle bir yöntem beyan ederseniz:
String say({String from, String msg})
Üstü from
ve msg
vardır named
sen yöntemini çağırdığınızda, parametreler say
kullanmak gerekir say(from: "xx", msg: "xx")
. Anahtarlar bulunamaz.
Ancak konumsal parametreler kullanıyorsanız, özgürsünüz.
Named
parametreleri böyle adlandırılır, çünkü bunları konuma göre değil, ada göre tanımlayabilirsiniz (adlandırılmış iki parametrenin konumunu değiştirirseniz, önemli değildir). Yukarıdaki yanıta bakınız: Savaranaraja
Konumsal Parametreler:
Varsayılan parametrelerle aynıdır. Örneğin:
void add(int x, [int y = 3]);
Burada y varsayılan değeri 3'tür
Adlandırılmış Parametreler:
Bunlar, parametrenin adı ve ardından iletilen değer iletilerek herhangi bir sırayla geçirilebilen parametrelerdir. Örneğin:
void sum({int num1, int num2});
Bu işleve şöyle denir:
sum(num1: 12, num2: 24);
Ayrıca adlandırılmış parametrelerin de varsayılan değerleri olabilir.