Dart prend en charge à la fois les paramètres facultatifs nommés et les paramètres facultatifs de position. Quelles sont les différences entre les deux?
De plus, comment savoir si un paramètre facultatif a été réellement spécifié?
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 :
production:
>> Paramètre de position facultatif
Le paramètre sera divulgué avec des crochets [] et les paramètres entre crochets sont facultatifs.
exemple:
production:
>> Paramètre nommé facultatif
exemple:
production:
>> Paramètre par défaut facultatif
exemple:
production:
merci pour l'explication claire donnée à partir de ce lien vidéo, crédits au créateur vidéo.
lien vidéo: OptionalPositionalParameters
lien vidéo: OptionalNamedParameters
lien vidéo: OptionalDefaultParameters
la source
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:
la source
De doc, nous obtenons que les deux paramètres
positional
etnamed
sont facultatifs, ce qui signifie qu'ils peuvent tous être absents.À mon avis, les
named
paramètres sont plus stricts que lespositional
autres. Par exemple, si vous déclarez une telle méthode:Ci
from
- dessus etmsg
sont desnamed
paramètres, lorsque vous appelez la méthode,say
vous devez utilisersay(from: "xx", msg: "xx")
. Les clés ne peuvent pas être absentes.Cependant, si vous utilisez des paramètres de position, vous êtes libre.
la source
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 SavaranarajaParamètres de position:
Ils sont identiques aux paramètres par défaut. Par exemple:
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:
Cette fonction est appelée comme ceci:
Les paramètres nommés peuvent également avoir des valeurs par défaut.
la source