【Flutter/Dart】カスケード記法(ダブルドット/ドット2つ)/使い方/基礎から実践

最終更新日

Dartの基本文であるカスケード記法(ダブルドット)について調べてまとめました。基礎から実践までサンプルがあります。動かない場合はコメントください。

動かすにはDartpadを使用してください。

なお、カスケード演算子をしようする前に前提知識としてクラスを理解しておいてください。

【Flutter/Dart】クラスの基本を理解しよう!プロパティ/メソッド/コンストラクタ/インスタンス化

カスケード演算子

公式サイト

https://dart.dev/guides/language/language-tour#cascade-notation

  • 直前に作ったオブジェクト(以下の場合はpaint) に対する処理(関数呼び出しやフィールドへのアクセス)を短く記述できる。
  • カスケード記法に続くコードは、返されるかもしれない値を無視して、このオブジェクトを操作します。
  • 続く処理は ; が不要。最後の処理に;をつける。

基本

Cascade notationを利用する場合

querySelector('#confirm') // Get an object.
  ..text = 'Confirm'      // Use its members.
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));
class User {
  String name;
  int age;
  double height;
  double weight;
User(name, age, height, weight) {
    this.name = name;
    this.age = age;
    this.height = height;
    this.weight = weight;
  }
}
void main() {
  User user = User('jojo', 10, 186.5, 75.4);
  print(user.name);
  print(user.age);
  print(user.height);
  print(user.weight);
  
  // カスケード記法
  user
    ..name = 'jojojojo'
    ..age = 20
    ..height = 154.1
    ..weight = 53.2;
print(user.name);
  print(user.age);
  print(user.height);
  print(user.weight);
  }

Cascade notationを利用しない場合

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));
class User {
  String name;
  int age;
  double height;
  double weight;

  User(name, age, height, weight) {
    this.name = name;
    this.age = age;
    this.height = height;
    this.weight = weight;
  }
}
void main() {
  User user = User('jojo', 10, 186.5, 75.4);
  print(user.name);
  print(user.age);
  print(user.height);
  print(user.weight);
user.name = 'jojojojo';
  user.age = 20;
  user.height = 154.1;
  user.weight = 53.2;

  print(user.name);
  print(user.age);
  print(user.height);
  print(user.weight);}
  

Listのカスケード演算子

Listクラスでも、カスケード演算子を使って書くことができます。これを使うと楽にListクラスを書くことができます。

main() {
  var list = new List();
  list.addAll([1, 2, 3, 4, 5]);
  print(list);
  // [1, 2, 3, 4, 5]
  list.fillRange(1, 3, 999);
  print(list);
  // [1, 999, 999, 4, 5]
// 同じ内容をカスケード記法で書いてみます
  var list2 = new List()
                  ..addAll([1, 2, 3, 4, 5])
                  ..fillRange(1, 3, 999);
  print(list2);
  // [1, 999, 999, 4, 5]
}

参考

https://zenn.dev/ryouhei_furugen/scraps/02b8a0c5981e8e

fem