Dart unterstützt sowohl benannte optionale Parameter als auch optionale Positionsparameter. Was sind die Unterschiede zwischen den beiden?
Wie können Sie außerdem feststellen, ob tatsächlich ein optionaler Parameter angegeben wurde?
Dart hat zwei Arten von optionalen Parametern: benannt und positionell . Bevor ich die Unterschiede diskutiere, möchte ich zunächst die Ähnlichkeiten diskutieren.
Die optionalen Parameter von Dart sind insofern optional , als der Aufrufer beim Aufrufen der Funktion keinen Wert für den Parameter angeben muss.
Optionale Parameter können nur nach erforderlichen Parametern deklariert werden.
Optionale Parameter können einen Standardwert haben, der verwendet wird, wenn ein Anrufer keinen Wert angibt.
Optionale Positionsparameter
Ein von eingeschlossener Parameter [ ]
ist ein optionaler Positionsparameter. Hier ist ein Beispiel:
getHttpUrl(String server, String path, [int port=80]) {
// ...
}
Im obigen Code port
ist optional und hat einen Standardwert von 80
.
Sie können getHttpUrl
mit oder ohne den dritten Parameter aufrufen .
getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
Sie können mehrere Positionsparameter für eine Funktion angeben:
getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
// ...
}
Die optionalen Parameter sind insofern positionell , als Sie sie nicht weglassen können, port
wenn Sie sie angeben möchten numRetries
.
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);
Wenn Sie nicht wissen, was 8080 und 5 sind, ist es natürlich schwer zu sagen, was diese scheinbar magischen Zahlen sind. Sie können benannte optionale Parameter verwenden , um besser lesbare APIs zu erstellen.
Benannte optionale Parameter
Ein von eingeschlossener Parameter { }
ist ein benannter optionaler Parameter. Hier ist ein Beispiel:
getHttpUrl(String server, String path, {int port = 80}) {
// ...
}
Sie können getHttpUrl
mit oder ohne den dritten Parameter aufrufen . Sie müssen den Parameternamen verwenden, wenn Sie die Funktion aufrufen.
getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
Sie können mehrere benannte Parameter für eine Funktion angeben:
getHttpUrl(String server, String path, {int port = 80, int numRetries = 3}) {
// ...
}
Da benannte Parameter namentlich referenziert werden, können sie in einer anderen Reihenfolge als ihre Deklaration verwendet werden.
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);
Ich glaube, dass benannte Parameter das Verständnis von Anrufseiten erleichtern, insbesondere wenn es boolesche Flags oder nicht kontextbezogene Nummern gibt.
Überprüfen, ob ein optionaler Parameter angegeben wurde
Leider können Sie nicht zwischen den Fällen "Ein optionaler Parameter wurde nicht angegeben" und "Ein optionaler Parameter wurde mit dem Standardwert bereitgestellt" unterscheiden.
Hinweis: Sie können optionale Positionsparameter oder benannte optionale Parameter verwenden, jedoch nicht beide in derselben Funktion oder Methode. Folgendes ist nicht erlaubt.
thisFunctionWontWork(String foo, [String positonal], {String named}) {
// will not work!
}
=
statt angegeben werden .:
Nach meinem Verständnis kann der Methodenparameter in Dart in zwei Typen angegeben werden.
>> Erforderlicher Parameter
Erforderlicher Parameter ist ein bekannter alter Parameter, mit dem wir alle vertraut sind
Beispiel :
Ausgabe:
>> Optionaler Positionsparameter
Parameter werden mit eckiger Klammer [] angegeben und Parameter mit eckiger Klammer sind optional.
Beispiel:
Ausgabe:
>> Optionaler benannter Parameter
Beispiel:
Ausgabe:
>> Optionaler Standardparameter
Beispiel:
Ausgabe:
Vielen Dank für die klare Erklärung aus diesem Videolink. Dank an den Videokünstler.
Videolink: OptionalPositionalParameters
Videolink: OptionalNamedParameters
Videolink: OptionalDefaultParameters
quelle
Wenn der Parameter einer Funktion mit der Syntax "paramName: value" angegeben wird, handelt es sich um einen benannten Parameter. Solche Parameter können optional dargestellt werden, indem sie in Klammern [und] eingeschlossen werden. Eine rudimentäre Demonstration dieser Funktion kann im folgenden Hello World-Programm demonstriert werden:
quelle
Aus doc geht hervor , dass sowohl
positional
als auch dienamed
Parameter optional sind, was bedeutet, dass sie alle fehlen können.Meiner Meinung nach sind die
named
Parameter strenger alspositional
diejenigen. Wenn Sie beispielsweise eine solche Methode deklarieren:Über
from
undmsg
sindnamed
Parameter, wenn Sie Methode aufrufen,say
müssen Sie verwendensay(from: "xx", msg: "xx")
. Die Schlüssel dürfen nicht fehlen.Wenn Sie jedoch Positionsparameter verwenden, sind Sie frei.
quelle
Named
Parameter werden so aufgerufen, weil Sie sie tatsächlich anhand des Namens und nicht anhand der Position identifizieren können (wenn Sie die Position von zwei benannten Parametern wechseln, spielt dies keine Rolle). Siehe die Antwort oben von SavaranarajaPositionsparameter:
Sie entsprechen den Standardparametern. Beispielsweise:
Hier hat y den Standardwert 3
Benannte Parameter:
Dies sind Parameter, die in beliebiger Reihenfolge übergeben werden können, indem der Name des Parameters gefolgt vom übergebenen Wert übergeben wird. Beispielsweise:
Diese Funktion heißt folgendermaßen:
Auch benannte Parameter können Standardwerte haben.
quelle