dartでの二重ドット(。)の使用をリストしますか?


141

時々これを見る List list = [];

その後 list..add(color)

1ドット(.)と2ドット(..)の違いは何ですか?

回答:


242

..カスケード表記として知られています。同じオブジェクトで複数のメソッドを呼び出す場合、同じターゲットを繰り返さないようにすることができます。

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);

76

それはダートのカスケード演算子です

var l1 = new List<int>()..add(0)..addAll([1, 2, 3]);

結果としてl1リストになります[0, 1, 2, 3]

var l1 = new List<int>().add(0).addAll([1, 2, 3]);

.add(0)返されるため、エラーになりますvoid

..(前者の例では)はを参照しnew List().(後者では)式の前の部分の戻り値を参照します。

..thisようなあらゆる種類のメソッドで戻る必要を回避するために導入されましたadd()APIを流暢に使用できるにました。

.. これは、すべてのクラスにそのまま使用できます。


ちなみに.. (in former example) refers to new List()、私の意見ではNO Listを使用..しているときに、もう一度新しいものを作成しているということですか。私はあなたのnew言葉に混乱しました、それは本当に新しいのですか、それともnewここでキーワードについて話しているのですか?
CopsOnRoad 2018年

最初newはオプションです。..返されたリストを指すnew List<int>()など、その上に複数のメソッドを呼び出すことができますadd(0) addAll(...)繰り返すことなくl1.、それがに割り当てられて作成されたリストのインスタンスであるl1ないチェーン内の最後のメソッドの戻り値(addAll(...))。これはあなたの質問に答えますか?
ギュンターZöchbauer

1
絶対に!newDart 2.0以降はオプションであることはわかっnewています。上記のコンテキストで混乱しました。説明をありがとうございます。
CopsOnRoad 2018年

1
..add(6)のようですl1.add(6)、の.add(6)ようl1.add(5).add(6)です。add(5)戻ってvoid、あなたが呼び出すことができませんadd()void
ギュンターZöchbauer

2
このドキュメントに従ってください:-dartlang.org/guides/language/language-tour#cascade-notation- 厳密に言えば、カスケードの「ダブルドット」表記は演算子ではありません。これはDart構文の一部にすぎません。
Mrスペシャル

17

カスケード(..)を使用すると、同じオブジェクトに対して一連の操作を実行できます。詳細はドキュメントを読んでください

querySelector('#confirm') // Get an object.
  ..text = 'Confirm' // Use its members.
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

前の例は次と同等です。

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

1
この例をありがとう!なぜ..onClick翻訳しないのbutton.classes.onClickですか?
Bouke Versteegh

1

..ダーツではカスケード演算子として知られています。

これにより、複数のサブシーケンス操作を使用できます。

例:

banerad..load()..show().

List coursename;
coursename..add("java")..add("flutter" )..add("dart");

ここに別の例があります

ここに別の例があります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.