Parfois, je vois ceci List list = [];
Dans ce cas list..add(color)
Quelle est la différence entre l'utilisation de 1 point( .
) et 2 points ( ..
) ?
Parfois, je vois ceci List list = [];
Dans ce cas list..add(color)
Quelle est la différence entre l'utilisation de 1 point( .
) et 2 points ( ..
) ?
..
est connu sous le nom de notation en cascade . Il permet de ne pas répéter la même cible si l'on veut appeler plusieurs méthodes sur le même objet.
List list = [];
list.add(color1);
list.add(color2);
list.add(color3);
list.add(color4);
// with cascade
List list = [];
list
..add(color1)
..add(color2)
..add(color3)
..add(color4);
Il s'agit simplement de clarifier ce point, car je n'ai pas compris et j'ai itéré plusieurs fois avant de saisir le concept : Il existe deux variantes de l'opérateur de cascade au moment où j'écris ces lignes. A savoir ... et ... ? Ne pas confondre avec ... et ... ? qui sont différents et s'appellent l'opérateur de propagation dans Dart. Alors que l'opérateur de propagation ... et ... ? est destiné aux listes/collections, l'opérateur de cascade ... et ... ? peut être appelé sur n'importe quel type d'objet, et pas seulement sur une liste. (L'exemple de code ci-dessus utilise une liste mais pourrait utiliser un autre objet comme un contrôleur par exemple). De plus, spread et cascade font des choses totalement différentes.
C'est la cascade de l'opérateur de Dart
var l1 = new List<int>()..add(0)..addAll([1, 2, 3]);
résultats en l1
étant une liste [0, 1, 2, 3]
var l1 = new List<int>().add(0).addAll([1, 2, 3]);
résultats une erreur, car .add(0)
retours void
..
(dans l'exemple précédent) désigne new List()
,
alors qu' .
(au plus tard) se réfère à la valeur de retour de la partie précédente de l'expression.
..
a été instaurée pour éviter la nécessité de revenir this
dans toutes sortes de méthodes comme l' add()
à être en mesure d'utiliser une API dans un fluide manière.
..
offre ce de la boîte pour toutes les classes.
Renvoi .. (in former example) refers to new List()
Vous voulez dire que nous créons à nouveau une nouvelle List
lorsque nous utilisons ..
A mon avis, NON. J'ai été dérouté par votre new
mot, est-ce que c'est vraiment NEW ou est-ce que vous parlez de new
mot-clé ici.
Première new
est désormais facultatif. ..
fait référence à la liste renvoyée par new List<int>()
et permet d'appeler plusieurs méthodes comme add(0)
addAll(...)
sans répéter l1.
et c'est l'instance de liste créée qui est assignée à l1
, no la valeur de retour de la dernière méthode de la chaîne ( addAll(...)
). Cela répond-il à votre question ?
Absolument ! Je sais que new
est optionnel à partir de Dart 2.0, j'ai été dérouté par le fait que l'option new
dans le contexte ci-dessus et merci pour votre explication.
Les cascades (..) permettent d'effectuer une séquence d'opérations sur le même objet. Lire le document pour plus de détails
querySelector('#confirm') // Get an object.
..text = 'Confirm' // Use its members.
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));
L'exemple précédent est équivalent à :
var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));
Merci pour cet exemple ! Une idée de la raison ? ..onClick
ne se traduit pas par button.classes.onClick
?
Cascade dans Dart Parce que les développeurs Dart utilisent beaucoup l'enchaînement de méthodes, la fonction de cascade est fournie pour les soutenir.
Voir le code suivant :
class Calculator {
double _accumulator = 0;
Calculator(double startValue) {
this._accumulator = startValue;
}
void add(double val) {
this._accumulator += val;
}
void subtract(double val) {
this._accumulator -= val;
}
double result() {
return this._accumulator;
}
}
C'est presque la même chose que ChainCalculator
à une seule différence près, à savoir que return this
a été supprimée dans chaque méthode.
Utilisons la fonction de cascade.
Calculator calculator = Calculator(0.0)
..add(12.0)
..subtract(10.0)
..add(5.0)..subtract(8.0);
print("Result: " + calculator.result().toString());
Il fonctionne parfaitement et est similaire au code précédent, mais au lieu de .
la notation, les utilisations en cascade ..
(double point) pour accéder à l'instance de modification en cours.
Pourquoi une cascade dans Dart ?
D'une manière générale, la cascade est très utile pour :
construction d'objets complexes (configuration de nombreuses propriétés) améliorer les objets pour l'encapsulation.
return this
rend les objets trop ouverts. construire des objets plus rapidement avec la cascade imbriquée. moins de lignes de code.
il est extrait de : Enchaînement de méthodes à l'aide de Cascade dans Dart
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.