BETA

DartのCascade notation(カスケード表記)とは

投稿日:2020-04-21
最終更新:2020-04-21

Dartを触っていて..という書き方を見ましたが、どういったものか、そもそも読み方からして分からなかったので自分用のメモです。

どうやら、..Cascade notationというDartのSyntaxのようです。

Cascade notation/カスケード表記とは

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.
Language tour | Dart

  • Cascade(..)は、同じオブジェクトに対して複数の操作を指定できる
  • 関数呼び出しに加えて、同じオブジェクトのフィールドにアクセスできる
  • オブジェクトそのものを表す一時変数を省略でき、より簡潔に記述できる

公式ドキュメントには以下の例が載っています。Cascade notation(カスケード表記)を利用する場合は、オブジェクトそのものを示す一時変数が不要になるため、利用しない場合より簡潔に表現できます。

Cascade notationを利用する場合

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

Cascade notationを利用しない場合

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

Cascade notation/カスケード表記の利用シーン

必須項目はコンストラクタの引数で渡して、その他の任意項目(オプション)はCascade notationで設定するというシーンで利用できそうです。
(簡易的なBuilderパターンとして利用する)

以下は、APIオブジェクト生成時にCascade notationを利用した例です。
accessKeysecretKeyはコンストラクタで渡して、その他の項目はCascade notationで設定してみました。

メソッドチェーンの要領で指定できるため便利そうです。

final paapi = PaAPI('accessKey', 'secretKey')  
  ..region = 'region'  
  ..service = 'service'  
  ..host = 'host'  
  ..path = 'path'  
  ..partnerTag = 'partnerTag';  

Cascade notation利用時の注意点

  • Cascade notationを利用して関数を呼び出す場合は、オブジェクト自身を返さないといけません。以下の例だと、sb.write()voidのため動きません。
var sb = StringBuffer();  
sb.write('foo')  
  ..write('bar'); // Error: method 'write' isn't defined for 'void'.  

参考

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@meganiiの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう