【Dart / Flutter】Switch文を使うときに気をつけるべきこと


Switch文の書き方

今回は、動物の名前をまとめたリストを宣言・初期化しています。
そのリストの要素をSwitch文の引数とし、その引数に応じて動物の名前を表示する処理です。

下記のSwith文では、'cat'と'dog'、'elephant'、それ以外のものの4つのケースを想定しています。

void main() {
  List<String> animalList = ['cat', 'dog', 'elephant'];
  
  switch(animalList[0]) {
    case 'cat':
      print(animalList[0]);
      break;
    case 'dog':
      print(animalList[1]);
      break;
    case 'elephant':
      print(animalList[2]);
      break;
    default:
      print('【異常系】: switch文の引数になりえないデータです。');
      break;
  }
}

テストケースの考え方

テストケースには正常系異常系のテストケースを盛り込む必要があります。
正常系とは「その対象が想定している入力に対して期待どおりの出力を行なうかどうか」という考え方です。
対して、異常系とは、「その対象が想定していない入力に対してきちんと対処できるかどうか」という考え方です。

今回の正常系のテストケースとしては、'cat'と'dog'、'elephant'になります。
対して、異常系のテストケースとしては、上記の3つ以外のものとなります。

このように、条件分岐のif文やswitch文ではしっかりと異常系のテストケースを想定して実装する必要があります。

Switch文のイケていない書き方

下記の場合ですと、'cat'か'dog'かそれ以外のパターンを想定しているケースになっています。
よくありがちな書き方ですが、下記のように実装してしまうと、default句の中身は正常系と異常系のテストケースが入り混じることになります。(正常系: 'elephant'、 異常系: 上記3つ以外のもの)

void main() {
  List<String> animalList = ['cat', 'dog', 'elephant'];
  
  switch(animalList[0]) {
    case 'cat':
      print(animalList[0]);
      break;
    case 'dog':
      print(animalList[1]);
      break;
    default:
      print(animalList[2]);
      break;
  }
}

結論

条件分岐(if文やswitch文)を使う際は、しっかりと異常系のテストパターンも想定して実装するようにしましょう😀