🙆

「Flutter」 Cascade notation・カスケード表記

2022/10/17に公開

日本語版

用語の説明

Flutterを勉強し始め、コードを探し始めると、時々このような表記に出会うことがあります: smth..smth()...

この表現はカスケード表記と呼ばれています。

カスケード(...)を使うと、同じオブジェクトに対して一連の操作を行うことができます。関数呼び出しの他に、その同じオブジェクトのフィールドにアクセスすることもできます。これにより、一時的な変数を作成する手順が省かれることが多く、より流動的なコードを書くことができるようになります。

例えば、次のような感じです。
myObject..method1()..method2()..method3();
myList?..method1()..method2()..method3()..method4();

リスト例 **

  var fruits = ["りんご","スイカ","バナナ"];
  
  fruits..clear()..add("イチゴ")..add("ぶどう")..add("チェリー")..sort();
  
  print(fruits);

この例は下に書いてるコードと一緒です。

  var fruits = ["りんご","スイカ","バナナ"];
  
  fruits.clear();
  fruits.add("イチゴ");
  fruits.add("ぶどう");
  fruits.add("チェリー");
  fruits.sort();
  
  print(fruits);

クラス例

class Book {
  String? title;
  int? pageNumbers;

  void setTitle(String title) {
    this.title = title;
  }

  void setPageNumbers(int pageNumbers) {
    this.pageNumbers = pageNumbers;
  }

  void printInfo() {
    print("書名: ${title ?? '不明'}");
    print("書籍のページ数: ${pageNumbers ?? '提供しない'}");
  }
}

void main() {
  Book()
    ..setTitle('オーバーロード')
    ..setsetPageNumbers(253)
    ..printInfo();

  final instance = Person();
  instance
    ..setTitle('ナルト')
    ..setsetPageNumbers(121)
    ..printInfo();
}

出力はこのようになります。

// 書籍1
書名:  Overlord
書籍のページ数: 253

// 書籍 2
書名:  Naruto
書籍のページ数: 121

English ver.

Term explenation

When you start your adventure with Flutter and start looking for some codes, sometimes you may encounter such a notation: smth..smth().. etc.

This expression is called Cascade notification.

Cascades (..) allow you to make a sequence of operations on the same object. In addition to function calls, you can also access fields on that same object. This often saves you the step of creating a temporary variable and allows you to write more fluid code.

For example, it can look like this.
myObject..method1()..method2()..method3();
myList?..method1()..method2()..method3()..method4();

List Example

  var fruits = ["apple","melon","banana"];
  
  fruits..clear()..add("strawberry")..add("grape")..add("cherry")..sort();
  
  print(fruits);

This example is equal to this ↓

  var fruits = ["apple","melon","banana"];
  
  fruits.clear();
  fruits.add("strawberry");
  fruits.add("grape");
  fruits.add("cherry");
  fruits.sort();
  
  print(fruits);

Class Example

class Book {
  String? title;
  int? pageNumbers;

  void setTitle(String title) {
    this.title = title;
  }

  void setPageNumbers(int pageNumbers) {
    this.pageNumbers = pageNumbers;
  }

  void printInfo() {
    print("Book title: ${title ?? 'Unknown'}");
    print("Book page numbers: ${pageNumbers ?? 'Not provided'}");
  }
}

void main() {
  Book()
    ..setTitle('Overlord')
    ..setsetPageNumbers(253)
    ..printInfo();

  final instance = Person();
  instance
    ..setTitle('Naruto')
    ..setsetPageNumbers(121)
    ..printInfo();
}

Output should look like this.

// Book 1
Book title: Overlord
Book page numbers: 253

// Book 2
Book title: Naruto
Book page numbers: 121

Discussion