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é ?

8voto

Paresh Mangukiya Points 13942

Dart dispose de deux types de paramètres de fonction : positional y named .

Paramètres positionnels facultatifs

Les paramètres positionnels sont ceux que vous connaissez probablement :

int sumUp(int a, int b, int c) {
  return a + b + c;
}
// ···
  int total = sumUp(1, 2, 3);

Avec Dart, vous pouvez rendre ces paramètres positionnels facultatifs en les mettant entre parenthèses :

int sumUpToFive(int a, [int b, int c, int d, int e]) {
  int sum = a;
  if (b != null) sum += b;
  if (c != null) sum += c;
  if (d != null) sum += d;
  if (e != null) sum += e;
  return sum;
}
// ···
  int total = sumUpToFive(1, 2);
  int otherTotal = sumUpToFive(1, 2, 3, 4, 5);

Les paramètres positionnels facultatifs sont toujours les derniers dans la liste des paramètres d'une fonction. Leur valeur par défaut est null, sauf si vous fournissez une autre valeur par défaut :

int sumUpToFive(int a, [int b = 2, int c = 3, int d = 4, int e = 5]) {
// ···
}
// ···
  int newTotal = sumUpToFive(1);
  print(newTotal); // <-- prints 15

Code example

Implémentez une fonction appelée joinWithCommas() qui accepte un à cinq entiers, puis renvoie une chaîne de ces nombres séparés par des virgules. Voici quelques exemples d'appels de fonctions et de valeurs renvoyées :

String joinWithCommas(int a, [int b, int c, int d, int e]) {
  var total = '$a';
  if (b != null) total = '$total,$b';
  if (c != null) total = '$total,$c';
  if (d != null) total = '$total,$d';
  if (e != null) total = '$total,$e';
  return total;
}

Appel de fonction

joinWithCommas(1)       
joinWithCommas(1, 2, 3)     
joinWithCommas(1, 1, 1, 1, 1)

Valeur retournée

'1'
'1,2,3'
'1,1,1,1,1'

Paramètres nommés facultatifs

En utilisant une syntaxe d'accolade, vous pouvez définir des paramètres facultatifs qui ont des noms.

void printName(String firstName, String lastName, {String suffix}) {
  print('$firstName $lastName ${suffix ?? ''}');
}
// ···
  printName('Avinash', 'Gupta');
  printName('Poshmeister', 'Moneybuckets', suffix: 'IV');

Comme vous pouvez vous y attendre, la valeur de ces paramètres est nulle par défaut, mais vous pouvez fournir des valeurs par défaut :

void printName(String firstName, String lastName, {String suffix = ''}) {
  print('$firstName $lastName $suffix');
}

Une fonction ne peut pas avoir à la fois des paramètres optionnels positionnels et optionnels nommés.

Exemple de code

Ajouter un copyWith() à la classe MyDataObject. Elle doit prendre trois paramètres nommés :

int newInt
String newString
double newDouble

Quand on l'appelle, copyWith() doit retourner un nouveau MyDataObject basé sur l'instance actuelle, avec les données des paramètres précédents (le cas échéant) copiées dans les propriétés de l'objet. Par exemple, si newInt n'est pas nul, alors copiez sa valeur dans le fichier anInt .

class MyDataObject {
  final int anInt;
  final String aString;
  final double aDouble;

  MyDataObject({
     this.anInt = 1,
     this.aString = 'Old!',
     this.aDouble = 2.0,
  });

  // Add your copyWith method here:
}

6voto

CoXier Points 813

De doc nous obtenons que les deux positional y named sont facultatifs, ce qui signifie qu'ils peuvent tous être absents.

A mon avis, named sont plus stricts que les paramètres positional ceux. Par exemple, si vous déclarez une telle méthode :

String say({String from, String msg})

Au-dessus de from y msg sont named lorsque vous appelez la méthode say vous devez utiliser say(from: "xx", msg: "xx") . Les touches ne peuvent pas être absentes.

Cependant, si vous utilisez des paramètres positionnels, vous êtes libre.

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