Dart obsługuje zarówno nazwane parametry opcjonalne, jak i pozycyjne parametry opcjonalne. Jakie są różnice między nimi?
Ponadto, jak możesz stwierdzić, czy faktycznie określono opcjonalny parametr?
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 :
wynik:
>> Opcjonalny parametr pozycyjny
parametr zostanie ujawniony w nawiasach kwadratowych [], a parametry w nawiasach kwadratowych są opcjonalne.
przykład:
wynik:
>> Opcjonalny nazwany parametr
przykład:
wynik:
>> Opcjonalny parametr domyślny
przykład:
wynik:
dzięki za jasne wyjaśnienie podane w tym linku wideo, podziękowania dla twórcy wideo.
łącze wideo: OptionalPositionalParameters
łącze wideo: OptionalNamedParameters
łącze wideo: OptionalDefaultParameters
źródło
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:
źródło
Z doc dowiadujemy się, że oba parametry
positional
inamed
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ę:Powyżej
from
imsg
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.
źródło
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 SavaranarajaParametry pozycyjne:
Są takie same jak parametry domyślne. Na przykład:
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:
Ta funkcja nazywa się następująco:
Nazwane parametry również mogą mieć wartości domyślne.
źródło