🥒

Guard clause のガード句 whenキーワード

2023/12/31に公開

これは何か?

Dart3からなのか、switchとif caseにwhenキーワードなるものがついたらしい?

https://dart.dev/language/branches

ガード条項:
case 句の後にオプションのガード句を設定するには、キーワード when を使用します。 if case および switch ステートメントと式の両方にガード句を続けることができます。

// Switch statement:
switch (something) {
  case somePattern when some || boolean || expression:
    //             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Guard clause.
    body;
}

// Switch expression:
var value = switch (something) {
  somePattern when some || boolean || expression => body,
  //               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Guard clause.
}

// If-case statement:
if (something case somePattern when some || boolean || expression) {
  //                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Guard clause.
  body;
}

早速使ってみる

Lintの警告が出てくるので、ignoreをつけた。なぜ出てくるのだろう?
||はor演算子で、1か3だったら条件は正しいよってプログラムです。それに、ガード句whenを使うと条件を追加できる。

void main() {
  int val = 0;

  switch(val) {
    // ガード句whenを使うと、caseの条件に加えて、さらに条件を追加できる。値が1 or 3でval が int だったら、'1 or 3'を出力する
    // ignore: unnecessary_type_check
    case 1 || 3 when val is int:
      print('1 or 3');
    // ignore: unnecessary_type_check
    case 2 || 4 when val is int:
      print('2 or 4');
    default:
      print('パターンにマッチしませんでした');
  }
}

実行結果:

1 or 3

Exited.

感想

以前Qiitaの記事を書いたときに、switch case whenなるものをカウンターで紹介してきた人がいて、whenなんてないな〜と調べていたら、あったので試しに使ってみましたところ、条件分岐を追加する処理だったようです。

Discussion