PR

Java:Switch文による条件分岐のコツを3分で解説

Java

Javaのプログラムを書くときに、指定した条件に応じて異なる処理を行うことがよくあります。基本的にはif文を使うこともできますが、複数の条件を扱うときにはswitchを使うとコードがすっきりして読みやすくなる場合があります。

参考 Java:if文で条件分岐5つのポイントを3分で解説

switch文とは、ある値に基づいて異なるコードを実行するための構文です。例えば、曜日を表す数値に応じて「月曜日」「火曜日」といった文字列を表示するようなイメージ。この文を使うと、条件ごとにコードを書く代わりに、まとめてシンプルに書くことができます。

このページでは、switch文の基本的な使い方についてわかりやすくご説明します。

はじめに、switch文の構造とそれを使うための基本的なルールをご説明。その後、具体的な例を通して、実際にどのように使うのかを解説していきます。

関連 Javaの1stステップ:基本的な構文ルールを復習する

スポンサーリンク

Java:Switch文の基本

switch文は、特定の値に基づいて異なるコードを実行するための構文です。

と言葉だけで説明しても分からないと思うので、早速switch文の基本的な書き方と、その構成要素についてご説明していきます。

Switch文の基本的な構文

まずは、switch文の基本的な構文ルールから。

switch (式) {
    case 値1:
        // 値1の場合の処理
        break;
    case 値2:
        // 値2の場合の処理
        break;
    // 必要に応じてcaseを追加
    default:
        // どの値にも一致しない場合の処理
}

switch文の基本1:式

switch文の最初には、評価される「」を書きます。式と言っても、基本的には数値や文字列の変数などです。ここでの式は、intbyteshortcharString、またはenumの型を持っている必要(要は、その式を何らかの形で評価できるかどうか)があります。

参考 Javaの1stステップ:基本構文ルール(変数の使い方)

int day = 3;
switch (day) {
    // ここにcaseラベルと処理を書きます
}

switch文の基本2:Caseラベル

次に、caseラベルを使って、評価された式の値に基づく処理を記述します。各caseの後には、値と、それに対応する処理を書きます。

switch (day) {
    case 1:
        System.out.println("Monday");
        break;
    case 2:
        System.out.println("Tuesday");
        break;
    case 3:
        System.out.println("Wednesday");
        break;
    // 必要に応じて他のcaseを追加
}

↑変数 day の値に応じて、1の場合は「Monday」を。2の場合は「Tuesday」を。3の場合は「Wednesday」を出力するようにしています。

switch文の基本3:Break文

caseの処理が終わった後には、break文を書きます。break文はswitch文を抜け出すためのものです。つまり、breakにきたらswitch文の処理をやめて次に移るということ。

これを忘れると、次のcaseの処理も実行されてしまう(フォールスルー)ので注意が必要です。

case 1:
    System.out.println("Monday");
    break; // ここでswitch文を抜ける

フォールスルーとは、caseブロック内にbreak文を書かずに次のcaseブロックの処理も続けて実行することです。これを使うと、似たような処理をまとめて書くことができるので、「あえて」フォールスルーを行うこともあります。

以下の例は、dayが1、2、3の場合に「Weekday」と表示されます。このように、複数のcaseが同じ処理を共有する場合にフォールスルーが有効になる場合があります。

int day = 2;

switch (day) {
    case 1: //case 1~2の場合にはbreakしない
    case 2:
    case 3:
        System.out.println("Weekday");
        break;
    case 4: //case 4の場合にもbreakしない
    case 5:
        System.out.println("Almost Weekend");
        break;
    case 6: //case 6の場合にもbreakしない
    case 7:
        System.out.println("Weekend");
        break;
    default:
        System.out.println("Invalid day");
}

switch文の基本4:Defaultラベル

最後に、defaultラベルを使って、どのcaseにも一致しなかった場合の処理を書くというのもポイント。これは必須ではなく任意なのですが、指定しておくと安心です。

int day = 3;

switch (day) {
    case 1:
        System.out.println("Monday");
        break;
    case 2:
        System.out.println("Tuesday");
        break;
    case 3:
        System.out.println("Wednesday");
        break;
    case 4:
        System.out.println("Thursday");
        break;
    case 5:
        System.out.println("Friday");
        break;
    case 6:
        System.out.println("Saturday");
        break;
    case 7:
        System.out.println("Sunday");
        break;
    default:
        System.out.println("Invalid day");
}
  • 構文:
    • switch (式) { case 値1: // 処理1; break; case 値2: // 処理2; break; default: // デフォルトの処理; }
  • :
    • switchキーワードの後に評価される式を書く。例: switch (day)
  • caseラベル:
    • 式の値に基づいて実行されるコードブロックを指定。例: case 1: // 処理;
  • break文:
    • caseの終了を示し、switch文から抜け出すために使用。例: break;
  • defaultラベル:
    • どのcaseラベルにも一致しない場合に実行されるコードブロックを指定。例: default: // デフォルトの処理;
  • フォールスルー:
    • break文を省略して次のcaseの処理も続けて実行させることができる。

switch文とIf文の違い

ここまでswitch文を学んできましたが、実際はどれもif文でも記述できる処理です。じゃ、実際switch文とif文って何が違うの?っていう疑問が浮かぶ方もいるかもしれません。

ので、ここで同じコードをswitch文とif文で書くとそれぞれどうなるかを見てみましょう。

サンプル1 Switch文の場合

int day = 3;

switch (day) {
    case 1:
        System.out.println("Monday");
        break;
    case 2:
        System.out.println("Tuesday");
        break;
    case 3:
        System.out.println("Wednesday");
        break;
    case 4:
        System.out.println("Thursday");
        break;
    case 5:
        System.out.println("Friday");
        break;
    case 6:
        System.out.println("Saturday");
        break;
    case 7:
        System.out.println("Sunday");
        break;
    default:
        System.out.println("Invalid day");
}

サンプル2 If文の場合

int day = 3;

if (day == 1) {
    System.out.println("Monday");
} else if (day == 2) {
    System.out.println("Tuesday");
} else if (day == 3) {
    System.out.println("Wednesday");
} else if (day == 4) {
    System.out.println("Thursday");
} else if (day == 5) {
    System.out.println("Friday");
} else if (day == 6) {
    System.out.println("Saturday");
} else if (day == 7) {
    System.out.println("Sunday");
} else {
    System.out.println("Invalid day");
}

ご覧のようにSwitch文の一番のメリットは、コードが見やすくなることです。特に複数の条件を扱う場合、switch文を使うとコードの構造がシンプルでわかりやすくなります。

また数値や文字列の比較において、switch文はif文より実行速度が速い場合があります。利用されるシーンや条件にも応じて変わるのですが、プログラムのパフォーマンスを改善する施策の一環としてif文→switch文にリファクタリングされる場合もあります。

一方で、switch文にはデメリットもあります。

まず、複雑な条件を扱うのには向いていません。複数の条件を組み合わせた複雑な判定を行う場合、switch文では表現しづらいかったりします。また、switch文で使用できるデータ型は限られており、int、byte、short、char、String、enumのみに対応しています。

Switch文の実践的な使い方と注意点

Javaのswitch文は、特定の条件に基づいて異なる処理を実行するのに非常に便利。最後に、現場でよくある使い方と注意点、ベストプラクティスについて説明します。

実践例1 ユーザー権限に応じたメニュー表示

実際の現場では、ユーザーの権限に応じて異なるメニューを表示したいような場合があります。このような場合にswitch文が役立ちます。

public class UserMenu {
    public static void main(String[] args) {
        String role = "editor"; // 例としてユーザーの役割を設定

        switch (role) {
            case "admin":
                System.out.println("管理者メニューを表示します");
                // 管理者向けの機能をここに追加
                break;
            case "editor":
                System.out.println("編集者メニューを表示します");
                // 編集者向けの機能をここに追加
                break;
            case "viewer":
                System.out.println("閲覧者メニューを表示します");
                // 閲覧者向けの機能をここに追加
                break;
            default:
                System.out.println("無効な役割です");
                // 無効な役割の場合の処理をここに追加
        }
    }
}

実践例2 商品カテゴリに応じた割引計算

商品カテゴリに応じて異なる割引を適用する場合の例です。

public class DiscountCalculator {
    public static void main(String[] args) {
        String category = "electronics"; // 商品カテゴリを設定
        double price = 100.0; // 商品の価格

        double discountPrice;

        switch (category) {
            case "electronics":
                discountPrice = price * 0.9; // 10%の割引
                System.out.println("電子機器カテゴリの割引価格: " + discountPrice);
                break;
            case "clothing":
                discountPrice = price * 0.8; // 20%の割引
                System.out.println("衣類カテゴリの割引価格: " + discountPrice);
                break;
            case "food":
                discountPrice = price * 0.95; // 5%の割引
                System.out.println("食品カテゴリの割引価格: " + discountPrice);
                break;
            default:
                System.out.println("無効なカテゴリです。割引なしの価格: " + price);
                // 無効なカテゴリの場合の処理をここに追加
        }
    }
}

まとめ JavaのSwitch文

  • 構文:
    • switch (式) { case 値1: // 処理1; break; case 値2: // 処理2; break; default: // デフォルトの処理; }
  • :
    • switchキーワードの後に評価される式を書く。例: switch (day)
  • caseラベル:
    • 式の値に基づいて実行されるコードブロックを指定。例: case 1: // 処理;
  • break文:
    • caseの終了を示し、switch文から抜け出すために使用。例: break;
  • defaultラベル:
    • どのcaseラベルにも一致しない場合に実行されるコードブロックを指定。例: default: // デフォルトの処理;
  • フォールスルー:
    • break文を省略して次のcaseの処理も続けて実行させることができる。
public class UserRole {
    public static void main(String[] args) {
        String role = "editor"; // ユーザーの役割を設定

        switch (role) {
            case "admin":
                System.out.println("管理者メニューを表示します");
                // 管理者向けの機能をここに追加
                break;
            case "editor":
                System.out.println("編集者メニューを表示します");
                // 編集者向けの機能をここに追加
                break;
            case "viewer":
                System.out.println("閲覧者メニューを表示します");
                // 閲覧者向けの機能をここに追加
                break;
            default:
                System.out.println("無効な役割です");
                // 無効な役割の場合の処理をここに追加
        }
    }
}

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
Java
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました