2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Flutter] カスケード記法(..)について本気で理解する

Last updated at Posted at 2023-12-05

こんにちは。いせりゅーです😋

この記事は、株式会社ゆめみの23卒 Advent Calendar 2023のアドベントカレンダーになります!!
色々な種類の記事が投稿されるので、お楽しみに🤗

最近、新しいトピックに取り組む際の挑戦や躓きを経験しています。そんな中、業務でのフィードバックを通じて、カスケード記法(..)の理解について新たな気づきを得ました。それを皆さんと共有したいと思います!!

問題の背景

  • カスケード記法についてはなんとなく知っていたが他にもメリットがあることが知らなかった

こちらを参考にさせていただきました。

認識のミスがありましたら、コメントいただけると幸いです🙇

カスケード記法(..)とは

  • 「..」を使うと、メソッドやプロパティを記載を連続して使用できるDartの文法
  • 同じオブジェクトに対して一連の操作を実行できる

カスケード記法(..)を使うメリット

  • コードを一時変数を作成する手間が省ける
    コードをすっきりと簡潔にできる

コードの記載例

1.簡潔に記載できる

Before

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

after

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

2.戻り値を操作できる

今回は、ViewModelのテストコードから引っ張ってきました。今回は、カスケード記法を使うかどうかで戻り値が変わることを見るために必要なコードのみを記載します。

全体的なコードはこちらになります。

weather_repository.dart

  Result<WeatherResult, String> getWeather(WeatherRequest weatherRequest) {
    try {
      final weatherDecode = weatherDataSource.fetchWeather(weatherRequest);
      final result = WeatherResult.fromJson(weatherDecode);
      return Result.success(result);
    } on YumemiWeatherError catch (error) {
      switch (error) {
        case YumemiWeatherError.unknown:
          return const Result.failure(ErrorMessage.unknown);
        case YumemiWeatherError.invalidParameter:
          return const Result.failure(ErrorMessage.invalidParameter);
      }
    } on Exception catch (_) {
      return const Result.failure(ErrorMessage.other);
    }
WeatherScreenViewModel create() =>
      container.read(weatherScreenViewModelProvider().notifier);


//  戻り値がResult<WeatherResult, String>になる。
final hoge = create().reloadWeather();


//  戻り値がWeatherScreenViewModelになる
final fuga = create()..reloadWeather();

解説

final hoge = create().reloadWeather();
  • reloadWeatherを呼び出すため、戻り値は、Result<WeatherResult, String>になります
final fuga = create()..reloadWeather();
  • reloadWeather() メソッドの戻り値は無視され、create()メソッドによって生成された WeatherScreenViewModelオブジェクトが fuga 変数に格納される。

最後に

  • 僕自身は、..については認知はしていましたが、カスケード記法という名前であることやできることについて知りませんでした。
2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?