295 votes

Quelle est la différence entre les paramètres nommés et positionnels dans Dart ?

Dart prend en charge les paramètres optionnels nommés et les paramètres optionnels positionnels. Quelles sont les différences entre les deux ?

De même, comment savoir si un paramètre facultatif a réellement été spécifié ?

535voto

Seth Ladd Points 13589

Dart dispose de deux types de paramètres optionnels : nommé y positionnel . Avant de discuter des différences, permettez-moi d'abord de discuter des similitudes.

Les paramètres optionnels de Dart sont en option en ce sens que l'appelant n'est pas tenu 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 obligatoires.

Les paramètres facultatifs peuvent avoir une valeur par défaut, qui est utilisée lorsque l'appelant ne spécifie pas de valeur.

Paramètres positionnels facultatifs

Un paramètre enveloppé par [ ] est un paramètre optionnel positionnel. 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 positionnels pour une fonction :

getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
  // ...
}

Les paramètres facultatifs sont positionnel en ce sens que vous ne pouvez pas omettre port si vous voulez 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 de savoir ce que sont 8080 et 5, il est difficile de dire ce que sont ces chiffres apparemment magiques. Vous pouvez utiliser paramètres facultatifs nommés pour créer des API plus lisibles.

Paramètres facultatifs nommés

Un paramètre enveloppé 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 pouvez consulter le site doit 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}) {
  // ...
}

Comme les paramètres nommés sont référencés par leur nom, ils peuvent être utilisés dans un ordre différent de celui 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 rendent les sites d'appel plus faciles à comprendre, en particulier lorsqu'il y a des drapeaux booléens ou des chiffres hors contexte.

Vérifier si un paramètre optionnel 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".

Note : Vous pouvez utiliser des paramètres optionnels positionnels ou des paramètres facultatifs nommés, mais pas les deux dans la même fonction ou méthode. Les éléments suivants ne sont pas autorisés.

thisFunctionWontWork(String foo, [String positonal], {String named}) {
  // will not work!
}

65voto

SaravanaRaja Points 951

Dans Dart, d'après ce que j'ai compris, le paramètre de méthode peut être donné de deux façons.

  • Paramètre requis
  • Paramètre optionnel (positionnel, nommé et par défaut)

>> Paramètre requis

Le paramètre requis est un ancien paramètre 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);

sortie :

length = 10, breath = 20, height = 30

>> Paramètre positionnel facultatif

le paramètre sera divulgué avec des crochets [ ] & 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

sortie :

length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null

>> Paramètre nommé facultatif

  • Le paramètre sera divulgué avec des crochets { }.
  • Les paramètres entre crochets sont facultatifs.
  • il faut utiliser le nom du paramètre pour assigner une valeur qui est séparée par un collier. :
  • entre crochets l'ordre des paramètres n'a pas d'importance
  • Ces types de paramètres nous aident à éviter toute confusion lors du passage de la valeur d'une fonction qui a plusieurs paramètres.

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

sortie :

length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null

>> Paramètre optionnel par défaut

  • de la même manière que le paramètre optionnel nommé, en plus nous pouvons assigner une valeur par défaut pour ce paramètre.
  • ce qui signifie qu'aucune valeur n'est passée, cette valeur par défaut sera prise.

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 

sortie :

length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken

merci pour l'explication claire donnée par ce lien vidéo, crédit au créateur de la vidéo.

lien vidéo : OptionalPositionalParameters

lien vidéo : OptionalNamedParameters

lien vidéo : OptionalDefaultParameters

9voto

ZenBoat Points 488

Exemples de Flutter

Arguments nommés

Le site Duration classe prend des paramètres nommés :

const Duration(
{int days = 0,
int hours = 0,
int minutes = 0,
int seconds = 0,
int milliseconds = 0,
int microseconds = 0}
)

Arguments de position

Le site DateTime classe Le constructeur de l'application a un argument positionnel obligatoire, et 7 arguments positionnels optionnels :

DateTime(
int year,
[int month = 1,
int day = 1,
int hour = 0,
int minute = 0,
int second = 0,
int millisecond = 0,
int microsecond = 0]
)

Quand utiliser quoi ?

Pour dates/heures En effet, il n'y a pas de sens à préciser un jour si on ne précise pas un mois. Si je vous disais lundi, vous ne sauriez pas de quel lundi je parle. Cela n'a pas de sens si vous indiquez un mois mais pas d'année. Les dates vont naturellement du plus grossier au plus fin. Bien sûr, dans la réalité, vous supposeriez que le lundi est le lundi suivant, mais les programmes ne peuvent pas le supposer.

Pour Durée il importe peu de savoir lequel des deux est spécifié. Une durée de temps peut être de 1 seconde, de 1 milliseconde ou de 5 jours. Si je vous dis d'attendre 5 secondes, je n'ai pas besoin de vous dire 0 jour, 0 heure, 0 minute et 5 secondes .

8voto

Balepur Points 71

Lorsque le paramètre d'une fonction est spécifié à l'aide de la syntaxe "paramName : valeur", il s'agit d'un paramètre nommé. De tels paramètres peuvent être rendus facultatifs en les entourant de crochets [ et ]. Une démonstration rudimentaire de cette fonction peut être faite dans le programme Hello World suivant :

sayHello([String name = ' World!']) {
  print('Hello, ${name}');
}

void main() {
  sayHello('Govind');
}

8voto

Zohaib Hamdule Points 343

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 suit :

sum(num1: 12, num2: 24);

Les paramètres nommés peuvent également avoir des valeurs par défaut.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X