Antworten:
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!
}
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 :
findVolume(int length, int breath, int height) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);
Ausgabe:
length = 10, breath = 20, height = 30
>> Optionaler Positionsparameter
Parameter werden mit eckiger Klammer [] angegeben und Parameter mit eckiger Klammer sind optional.
Beispiel:
findVolume(int length, int breath, [int height]) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);//valid
findVolume(10,20);//also valid
Ausgabe:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null
>> Optionaler benannter Parameter
Beispiel:
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
Ausgabe:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null
>> Optionaler Standardparameter
Beispiel:
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
Ausgabe:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken
Vielen Dank für die klare Erklärung aus diesem Videolink. Dank an den Videokünstler.
Videolink: OptionalPositionalParameters
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:
sayHello([String name = ' World!']) {
print('Hello, ${name}');
}
void main() {
sayHello('Govind');
}
Aus doc geht hervor , dass sowohl positional
als auch die named
Parameter optional sind, was bedeutet, dass sie alle fehlen können.
Meiner Meinung nach sind die named
Parameter strenger als positional
diejenigen. Wenn Sie beispielsweise eine solche Methode deklarieren:
String say({String from, String msg})
Über from
und msg
sind named
Parameter, wenn Sie Methode aufrufen, say
müssen Sie verwenden say(from: "xx", msg: "xx")
. Die Schlüssel dürfen nicht fehlen.
Wenn Sie jedoch Positionsparameter verwenden, sind Sie frei.
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 Savaranaraja
Positionsparameter:
Sie entsprechen den Standardparametern. Beispielsweise:
void add(int x, [int y = 3]);
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:
void sum({int num1, int num2});
Diese Funktion heißt folgendermaßen:
sum(num1: 12, num2: 24);
Auch benannte Parameter können Standardwerte haben.