Flutter

Dartのswitch文|条件分岐を読みやすく書く基本と使い分け

Dartのswitch文を初心者向けに解説します。if文との違い、case、default、enumとの相性、Flutterで状態ごとに表示を分ける例を紹介します。

この記事の目次
  1. この記事の結論
  2. 基本のswitch文
  3. if文との使い分け
  4. enumと組み合わせる
  5. FlutterでWidgetを切り替える例
  6. switch式の考え方
  7. Flutterで使うときの考え方
  8. よくあるつまずき
  9. 次に読む記事
  10. まとめ

Dartのswitch文は、1つの値に対して複数の候補を分岐したい時に便利です。Flutterでは、状態、画面種別、メニュー選択、enumごとの表示切り替えで使えます。

この記事の結論

if文は自由な条件に向き、switch文は1つの値の候補ごとに処理を分ける時に向きます。enumと組み合わせると、状態ごとの表示を読みやすく整理できます。

基本のswitch文

final status = "loading";

switch (status) {
  case "loading":
    print("読み込み中");
  case "success":
    print("成功");
  case "error":
    print("エラー");
  default:
    print("不明");
}

if文との使い分け

範囲や複雑な条件はif文が向きます。固定の値や状態ごとの分岐はswitch文が読みやすくなります。

  • 点数が80以上ならA:if文が向く
  • statusがloading/success/errorのどれか:switch文が向く
  • 権限や画面種別をenumで分ける:switch文が向く

enumと組み合わせる

文字列よりenumを使うと、入力ミスを減らせます。状態が決まっている場合はenumを検討します。

enum LoadState { loading, success, error }

String message(LoadState state) {
  switch (state) {
    case LoadState.loading:
      return "読み込み中";
    case LoadState.success:
      return "完了";
    case LoadState.error:
      return "失敗";
  }
}

FlutterでWidgetを切り替える例

Widget buildBody(LoadState state) {
  switch (state) {
    case LoadState.loading:
      return const CircularProgressIndicator();
    case LoadState.success:
      return const Text("データを表示します");
    case LoadState.error:
      return const Text("読み込みに失敗しました");
  }
}

switch式の考え方

Dartでは値を返すswitch式も使えます。短い変換処理では、関数全体をすっきり書けます。

String label(LoadState state) => switch (state) {
  LoadState.loading => "読み込み中",
  LoadState.success => "完了",
  LoadState.error => "失敗",
};

Flutterで使うときの考え方

Flutterで状態ごとにWidgetを出し分ける場合、switch文やswitch式を使うと「どの状態で何を表示するか」が見えやすくなります。状態が増えたらenumと組み合わせると保守しやすいです。

よくあるつまずき

  • 複雑な範囲条件までswitchに詰め込む
  • 文字列の打ち間違いで分岐が動かない
  • 状態が増えたのに分岐を更新し忘れる
  • UIとデータ取得処理を同じswitchに混ぜる

次に読む記事

まとめ

Dartのswitch文は、状態や種類ごとの分岐を読みやすくする構文です。if文との使い分け、enum、FlutterでのWidget切り替えをセットで覚えましょう。