Réponses:
Dart a deux types de paramètres facultatifs: nommé et positionnel . Avant de discuter des différences, permettez-moi d'abord de discuter des similitudes.
Les paramètres facultatifs de Dart sont facultatifs en ce que l'appelant n'est pas obligé de spécifier une valeur pour le paramètre lors de l'appel de la fonction.
Les paramètres facultatifs ne peuvent être déclarés qu'après les paramètres requis.
Les paramètres facultatifs peuvent avoir une valeur par défaut, qui est utilisée lorsqu'un appelant ne spécifie pas de valeur.
Paramètres optionnels de position
Un paramètre entouré par [ ]
est un paramètre facultatif de position. Voici un exemple:
getHttpUrl(String server, String path, [int port=80]) {
// ...
}
Dans le code ci-dessus, port
est facultatif et a une valeur par défaut de 80
.
Vous pouvez appeler getHttpUrl
avec ou sans le troisième paramètre.
getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
Vous pouvez spécifier plusieurs paramètres de position pour une fonction:
getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
// ...
}
Les paramètres facultatifs sont positionnels dans la mesure où vous ne pouvez pas les omettre port
si vous souhaitez les spécifier numRetries
.
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);
Bien sûr, à moins que vous ne sachiez ce que sont 8080 et 5, il est difficile de dire quels sont ces nombres apparemment magiques. Vous pouvez utiliser des paramètres facultatifs nommés pour créer des API plus lisibles.
Paramètres facultatifs nommés
Un paramètre encapsulé par { }
est un paramètre facultatif nommé. Voici un exemple:
getHttpUrl(String server, String path, {int port = 80}) {
// ...
}
Vous pouvez appeler getHttpUrl
avec ou sans le troisième paramètre. Vous devez utiliser le nom du paramètre lors de l'appel de la fonction.
getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
Vous pouvez spécifier plusieurs paramètres nommés pour une fonction:
getHttpUrl(String server, String path, {int port = 80, int numRetries = 3}) {
// ...
}
Les paramètres nommés étant référencés par leur nom, ils peuvent être utilisés dans un ordre différent de leur déclaration.
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);
Je pense que les paramètres nommés facilitent la compréhension des sites d'appels, en particulier lorsqu'il existe des indicateurs booléens ou des numéros hors contexte.
Vérifier si un paramètre facultatif a été fourni
Malheureusement, vous ne pouvez pas faire la distinction entre les cas "un paramètre facultatif n'a pas été fourni" et "un paramètre facultatif a été fourni avec la valeur par défaut".
Remarque: vous pouvez utiliser des paramètres optionnels de position ou des paramètres optionnels nommés, mais pas les deux dans la même fonction ou méthode. Ce qui suit n'est pas autorisé.
thisFunctionWontWork(String foo, [String positonal], {String named}) {
// will not work!
}
=
au lieu de :
, selon dartlang.org/guides/language/… .
Dans Dart avec ma compréhension, le paramètre de méthode peut être donné en deux types.
>> Paramètre requis
Le paramètre requis est un paramètre de style ancien bien connu que nous connaissons tous
exemple :
findVolume(int length, int breath, int height) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);
production:
length = 10, breath = 20, height = 30
>> Paramètre de position facultatif
Le paramètre sera divulgué avec des crochets [] et les paramètres entre crochets sont facultatifs.
exemple:
findVolume(int length, int breath, [int height]) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);//valid
findVolume(10,20);//also valid
production:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null
>> Paramètre nommé facultatif
exemple:
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
production:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null
>> Paramètre par défaut facultatif
exemple:
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
production:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken
merci pour l'explication claire donnée à partir de ce lien vidéo, crédits au créateur vidéo.
lien vidéo: OptionalPositionalParameters
Lorsque le paramètre d'une fonction est spécifié à l'aide de la syntaxe "paramName: value", il s'agit d'un paramètre nommé. Ces paramètres peuvent être rendus facultatifs en les plaçant entre crochets [et]. Une démonstration rudimentaire de cette fonction peut être démontrée dans le programme Hello World suivant:
sayHello([String name = ' World!']) {
print('Hello, ${name}');
}
void main() {
sayHello('Govind');
}
De doc, nous obtenons que les deux paramètres positional
et named
sont facultatifs, ce qui signifie qu'ils peuvent tous être absents.
À mon avis, les named
paramètres sont plus stricts que les positional
autres. Par exemple, si vous déclarez une telle méthode:
String say({String from, String msg})
Ci from
- dessus et msg
sont des named
paramètres, lorsque vous appelez la méthode, say
vous devez utiliser say(from: "xx", msg: "xx")
. Les clés ne peuvent pas être absentes.
Cependant, si vous utilisez des paramètres de position, vous êtes libre.
Named
Les paramètres sont appelés comme ça parce que vous pouvez réellement les identifier par leur nom et non par leur position (si vous changez la position de deux paramètres nommés, cela n'a pas d'importance). Voir la réponse ci-dessus de Savaranaraja
Paramètres de position:
Ils sont identiques aux paramètres par défaut. Par exemple:
void add(int x, [int y = 3]);
Ici, y a la valeur par défaut de 3
Paramètres nommés:
Ce sont des paramètres qui peuvent être passés dans n'importe quel ordre en passant le nom du paramètre suivi de la valeur passée. Par exemple:
void sum({int num1, int num2});
Cette fonction est appelée comme ceci:
sum(num1: 12, num2: 24);
Les paramètres nommés peuvent également avoir des valeurs par défaut.