Dartのswitch文

Flutter/Dart

この記事では、Dartのswitch文について書いていきます。

サンプル


void main(){
  int score = 3;
    
  switch (score) {
    case 3:
      print('A判定');
      break;
    case 2:
      print('B判定');
      break;
    case 1:
      print('C判定');
      break;
   }

}

書き方

switch (//条件) {
    case //条件:
      //処理
      break;
  default://defaultは無くてもかまいません
//処理

   }

その他の注意点

複数の条件をまとめたい場合(空の case)

case の中に何も処理を書かない(空にする)と、次の case へ処理が合流します。この場合も break は書きません。

void main(){
  String animal = 'dog';
switch (animal) {
  case 'cat':
  case 'dog':
    print('ペット'); // 'cat' と 'dog' のどちらでもここが実行される
  default:
    print('その他');
}
}

※新しくDart 3以降は case 'cat' || 'dog': のように論理演算子 || を使って1行で複数の条件を比較する書くことも可能になりました。

void main(){
  String animal = 'dog';
switch (animal) {
  case 'cat' || 'dog':
    print('ペット'); // 'cat' と 'dog' のどちらでもここが実行される
  default:
    print('その他');
}
}

処理の途中で明示的に抜けたい場合(break が必要なケース)

case 内の処理の途中で、特定の条件(if文など)によってそれ以降の処理をスキップして switch を抜けたいときだけ break を使用します。breakを使用することにより、以下の処理を行いません。

void main(){
  int score = 100;
  bool isBonusPeriod = true; 

switch (score) {
  case 100:
    print('満点です!');
    if (isBonusPeriod) {
      print('ボーナス獲得!');
      break; // ここでswitch文を終了する
    }
    print('通常期間の満点です'); // isBonusPeriodがtrueなら、ここは実行されない
}}

フォールスルー

どれにも条件が合致しない場合かつbreak文がない場合、以下のような出力になります。具体的にはswitch文が無視されその下の処理に移行されます。

void main() {
int x = 5;
  switch(x)
  {
    case 1:
      print('1です。');
      case 2:
      print('2です。');
      case 3:
      print('3です。');
  }
  print('終わり!');
}

Dartのswitch文

  • case文に処理がある場合、case文の中の処理が終わるとbreakを必要とせずswitch文を抜ける
  • case文に合致する処理がない場合、フォールスルーが発生する

簡略化した書き方

具体的にはbreakを必要としません。これはDart3で新しく追加された機能でcaseに合致した処理があれば実行しbreakなしでswitch文から抜け出せます。

void main(){
  String status =  'closed';
  switch (status) {
    case 'open':
      print('公開中'); // 処理が終わると自動でswitchを抜ける
    case 'closed':
      print('終了');
    default:
      print('不明');
  }
}
タイトルとURLをコピーしました