Odpowiedzi:
Dart ma dwa typy parametrów opcjonalnych: nazwane i pozycyjne . Zanim omówię różnice, najpierw omówię podobieństwa.
Opcjonalne parametry Darta są opcjonalne , ponieważ obiekt wywołujący nie musi określać wartości parametru podczas wywoływania funkcji.
Parametry opcjonalne można zadeklarować tylko po dowolnych wymaganych parametrach.
Parametry opcjonalne mogą mieć wartość domyślną, która jest używana, gdy obiekt wywołujący nie określa wartości.
Pozycyjne parametry opcjonalne
Parametr zawijany przez [ ]
jest opcjonalnym parametrem pozycyjnym. Oto przykład:
getHttpUrl(String server, String path, [int port=80]) {
// ...
}
W powyższym kodzie port
jest opcjonalny i ma domyślną wartość 80
.
Możesz wywołać getHttpUrl
z trzecim parametrem lub bez niego.
getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
Dla funkcji można określić wiele parametrów pozycyjnych:
getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
// ...
}
Opcjonalne parametry są pozycyjne i nie możesz ich pominąć, port
jeśli chcesz je określić numRetries
.
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);
Oczywiście, jeśli nie wiesz, czym są 8080 i 5, trudno powiedzieć, jakie są te pozornie magiczne liczby. Możesz użyć nazwanych parametrów opcjonalnych aby utworzyć bardziej czytelne interfejsy API.
Nazwane parametry opcjonalne
Parametr zawijany przez { }
to nazwany parametr opcjonalny. Oto przykład:
getHttpUrl(String server, String path, {int port = 80}) {
// ...
}
Możesz wywołać getHttpUrl
z trzecim parametrem lub bez niego. Państwo musi przy wywołaniu funkcji użyć nazwy parametru.
getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
Możesz określić wiele nazwanych parametrów dla funkcji:
getHttpUrl(String server, String path, {int port = 80, int numRetries = 3}) {
// ...
}
Ponieważ do nazwanych parametrów odwołuje się nazwa, można ich używać w kolejności innej niż ich deklaracja.
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);
Uważam, że nazwane parametry ułatwiają zrozumienie witryn wywołujących, zwłaszcza gdy występują flagi logiczne lub numery poza kontekstem.
Sprawdzanie, czy podano opcjonalny parametr
Niestety, nie można rozróżnić przypadków „nie podano opcjonalnego parametru” i „opcjonalny parametr został dostarczony z wartością domyślną”.
Uwaga: Możesz użyć opcjonalnych parametrów pozycyjnych lub nazwanych parametrów opcjonalnych, ale nie obu w tej samej funkcji lub metodzie. Następujące elementy są niedozwolone.
thisFunctionWontWork(String foo, [String positonal], {String named}) {
// will not work!
}
=
zamiast :
, zgodnie z dartlang.org/guides/language/… .
W Dart, w moim rozumieniu, parametr metody można podać w dwóch typach.
>> Wymagany parametr
Parametr wymagany to dobrze znany parametr w starym stylu, który wszyscy znamy
przykład :
findVolume(int length, int breath, int height) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);
wynik:
length = 10, breath = 20, height = 30
>> Opcjonalny parametr pozycyjny
parametr zostanie ujawniony w nawiasach kwadratowych [], a parametry w nawiasach kwadratowych są opcjonalne.
przykład:
findVolume(int length, int breath, [int height]) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);//valid
findVolume(10,20);//also valid
wynik:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null
>> Opcjonalny nazwany parametr
przykład:
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
wynik:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null
>> Opcjonalny parametr domyślny
przykład:
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
wynik:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken
dzięki za jasne wyjaśnienie podane w tym linku wideo, podziękowania dla twórcy wideo.
łącze wideo: OptionalPositionalParameters
Jeśli parametr funkcji jest określony przy użyciu składni „nazwa_param: wartość”, jest to nazwany parametr. Takie parametry można renderować jako opcjonalne, umieszczając je w nawiasach [i]. Podstawową demonstrację tej funkcji można zademonstrować w następującym programie Hello World:
sayHello([String name = ' World!']) {
print('Hello, ${name}');
}
void main() {
sayHello('Govind');
}
Z doc dowiadujemy się, że oba parametry positional
i named
są opcjonalne, co oznacza, że wszystkie mogą być nieobecne.
Moim zdaniem named
parametry są bardziej rygorystyczne niż positional
jedne. Na przykład, jeśli zadeklarujesz taką metodę:
String say({String from, String msg})
Powyżej from
i msg
są named
parametrami, kiedy wywołujesz metodę, say
której musisz użyć say(from: "xx", msg: "xx")
. Kluczy nie może zabraknąć.
Jeśli jednak używasz parametrów pozycyjnych, jesteś wolny.
Named
parametry nazywane są w ten sposób, ponieważ można je zidentyfikować po nazwie, a nie po pozycji (jeśli zmienisz pozycję dwóch nazwanych parametrów, nie ma to znaczenia). Zobacz odpowiedź powyżej od Savaranaraja
Parametry pozycyjne:
Są takie same jak parametry domyślne. Na przykład:
void add(int x, [int y = 3]);
Tutaj y ma domyślną wartość 3
Nazwane parametry:
Są to parametry, które można przekazać w dowolnej kolejności, przekazując nazwę parametru, po której następuje przekazana wartość. Na przykład:
void sum({int num1, int num2});
Ta funkcja nazywa się następująco:
sum(num1: 12, num2: 24);
Nazwane parametry również mogą mieć wartości domyślne.