Risposte:
Il dardo ha due tipi di parametri opzionali: denominato e posizionale . Prima di discutere delle differenze, vorrei prima discutere delle somiglianze.
I parametri opzionali di Dart sono opzionali in quanto al chiamante non è richiesto di specificare un valore per il parametro quando si chiama la funzione.
I parametri opzionali possono essere dichiarati solo dopo tutti i parametri richiesti.
I parametri opzionali possono avere un valore predefinito, che viene utilizzato quando un chiamante non specifica un valore.
Parametri opzionali posizionali
Un parametro racchiuso da [ ]
è un parametro facoltativo posizionale. Ecco un esempio:
getHttpUrl(String server, String path, [int port=80]) {
// ...
}
Nel codice sopra, port
è facoltativo e ha un valore predefinito di 80
.
Puoi chiamare getHttpUrl
con o senza il terzo parametro.
getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
È possibile specificare più parametri posizionali per una funzione:
getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
// ...
}
I parametri opzionali sono posizionali in quanto non è possibile omettere port
se si desidera specificare numRetries
.
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);
Naturalmente, a meno che tu non sappia cosa sono 8080 e 5, è difficile dire quali siano quei numeri apparentemente magici. È possibile utilizzare parametri facoltativi denominati per creare API più leggibili.
Nominati parametri opzionali
Un parametro racchiuso da { }
è un parametro facoltativo denominato. Ecco un esempio:
getHttpUrl(String server, String path, {int port = 80}) {
// ...
}
Puoi chiamare getHttpUrl
con o senza il terzo parametro. È necessario utilizzare il nome del parametro quando si chiama la funzione.
getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
È possibile specificare più parametri con nome per una funzione:
getHttpUrl(String server, String path, {int port = 80, int numRetries = 3}) {
// ...
}
Poiché i parametri denominati sono referenziati per nome, possono essere utilizzati in un ordine diverso dalla loro dichiarazione.
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);
Credo che i parametri nominati rendano i siti di chiamata più facili da capire, specialmente quando ci sono flag booleani o numeri fuori contesto.
Verifica se è stato fornito un parametro facoltativo
Sfortunatamente, non è possibile distinguere tra i casi "non è stato fornito un parametro facoltativo" e "è stato fornito un parametro facoltativo con il valore predefinito".
Nota: è possibile utilizzare parametri facoltativi posizionali o parametri facoltativi denominati, ma non entrambi nella stessa funzione o metodo. Non è consentito quanto segue.
thisFunctionWontWork(String foo, [String positonal], {String named}) {
// will not work!
}
=
anziché anziché :
, secondo dartlang.org/guides/language/… .
In Dart con la mia comprensione, il parametro del metodo può essere dato in due tipi.
>> Parametro richiesto
Il parametro richiesto è un parametro ben noto di vecchio stile che tutti conosciamo
esempio :
findVolume(int length, int breath, int height) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);
produzione:
length = 10, breath = 20, height = 30
>> Parametro posizionale opzionale
il parametro verrà divulgato con parentesi quadre [] e i parametri tra parentesi quadre sono facoltativi.
esempio:
findVolume(int length, int breath, [int height]) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);//valid
findVolume(10,20);//also valid
produzione:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null
>> Parametro denominato facoltativo
esempio:
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
produzione:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null
>> Parametro predefinito opzionale
esempio:
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
produzione:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken
grazie per la chiara spiegazione fornita da questo collegamento video, ringraziamenti al creatore del video.
collegamento video: OptionalPositionalParameters
Quando il parametro di una funzione viene specificato utilizzando la sintassi "paramName: value", si tratta di un parametro denominato. Tali parametri possono essere resi opzionali racchiudendoli tra parentesi [e]. Una dimostrazione rudimentale di questa funzione può essere dimostrata nel seguente programma Hello World:
sayHello([String name = ' World!']) {
print('Hello, ${name}');
}
void main() {
sayHello('Govind');
}
Da doc otteniamo che entrambi positional
ed named
i parametri sono opzionali, il che significa che tutti possono essere assenti.
Secondo me, i named
parametri sono più severi di positional
quelli. Ad esempio, se dichiari tale metodo:
String say({String from, String msg})
Sopra from
e msg
sono named
parametri, quando si chiama il metodo say
è necessario utilizzare say(from: "xx", msg: "xx")
. Le chiavi non possono essere assenti.
Tuttavia, se si utilizzano parametri posizionali, si è liberi.
Named
i parametri sono chiamati in questo modo perché puoi effettivamente identificarli per nome e non per posizione (se cambi la posizione di due parametri nominati, non importa). Vedi la risposta sopra da Savaranaraja
Parametri posizionali:
Sono gli stessi dei parametri predefiniti. Per esempio:
void add(int x, [int y = 3]);
Qui y ha il valore predefinito di 3
Parametri nominati:
Questi sono parametri che possono essere passati in qualsiasi ordine passando il nome del parametro seguito dal valore passato. Per esempio:
void sum({int num1, int num2});
Questa funzione si chiama così:
sum(num1: 12, num2: 24);
Anche i parametri con nome possono avere valori predefiniti.