条件分岐②switch文を使いこなそう!初心者でもわかるJava基礎

この記事は約8分で読めます。

Javaの条件分岐で「if文」を紹介しましたが、if文だとプログラムが長くなることもありますよね?プログラムの中で特定の条件に応じて処理を切り替えるための「switch文」という強力なツールがあります。今回は、Javaのswitch文の基本をわかりやすく解説し、その魅力を探ります。

Javaのswitch文とは?

switch文の基本構文

Javaのswitch文は、特定の変数の値に基づいて複数のケースに分岐するための制御構文です。基本的な構文は以下の通りです。

switch (expression) {
    case value1:
        // value1の場合の処理
        break;
    case value2:
        // value2の場合の処理
        break;
    default:
        // どのcaseにも該当しない場合の処理
}

ここで、expressionは評価される式で、value1value2は比較対象の値です。各caseの後にはbreak文を置くことで、そのcaseの処理が終わった後にswitch文を抜け出すことができます。もしbreakを忘れると、次のcaseも実行されてしまう「フォールスルー」が発生することに注意が必要です。

switch文のメリット

switch文を使うことで、if-else文よりもコードが見やすく、管理しやすくなります。特に多くの条件分岐がある場合、switch文を利用することで可読性が向上し、バグの発見や修正が容易になります。また、switch文は整数や文字列、列挙型(enum)など、さまざまなデータ型に対応しています。

switch文の実践例

曜日を表示するプログラム

具体的な例を通して、switch文の使い方を見ていきましょう。以下のプログラムは、整数で表された曜日を文字列で表示するものです。

public class DayOfWeek {
    public static void main(String[] args) {
        int day = 3; // 1:月曜日, 2:火曜日, 3:水曜日, 4:木曜日, 5:金曜日, 6:土曜日, 7:日曜日

        switch (day) {
            case 1:
                System.out.println("月曜日");
                break;
            case 2:
                System.out.println("火曜日");
                break;
            case 3:
                System.out.println("水曜日");
                break;
            case 4:
                System.out.println("木曜日");
                break;
            case 5:
                System.out.println("金曜日");
                break;
            case 6:
                System.out.println("土曜日");
                break;
            case 7:
                System.out.println("日曜日");
                break;
            default:
                System.out.println("無効な日付です");
        }
    }
}

このプログラムを実行すると、dayが3のため「水曜日」と表示されます。switch文を用いることで、曜日の判定が直感的に行えることがわかります。

列挙型を使ったswitch文の活用

Javaのswitch文は、列挙型(enum)とも組み合わせて使用することができます。これにより、コードの可読性がさらに向上します。以下の例では、曜日を列挙型で表現し、switch文で処理を分岐します。

enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

public class EnumSwitch {
    public static void main(String[] args) {
        Day day = Day.WEDNESDAY;

        switch (day) {
            case MONDAY:
                System.out.println("月曜日");
                break;
            case TUESDAY:
                System.out.println("火曜日");
                break;
            case WEDNESDAY:
                System.out.println("水曜日");
                break;
            case THURSDAY:
                System.out.println("木曜日");
                break;
            case FRIDAY:
                System.out.println("金曜日");
                break;
            case SATURDAY:
                System.out.println("土曜日");
                break;
            case SUNDAY:
                System.out.println("日曜日");
                break;
            default:
                System.out.println("無効な日付です");
        }
    }
}

この例では、曜日を列挙型で定義し、switch文でその値に応じた処理を行っています。この方法は、可読性だけでなく、型安全性も高めてくれます。

switch文を使う際の注意点

フォールスルーに注意

switch文の特徴の一つに、フォールスルーがあります。これは、あるcaseの処理が終わった後に、次のcaseの処理も実行されることです。意図的に使用する場合もありますが、誤って使うとバグの原因になりますので注意が必要です。以下の例をご覧ください。

int number = 2;

switch (number) {
    case 1:
        System.out.println("1です");
    case 2:
        System.out.println("2です");
    case 3:
        System.out.println("3です");
    default:
        System.out.println("その他");
}

このプログラムを実行すると、「2です」「3です」「その他」とすべてのcaseが実行されてしまいます。これを防ぐためには、各caseの後に必ずbreak文を挿入する必要があります。

switch文の代替としてのif-else文

switch文が有効な場合もあれば、if-else文の方が適している場合もあります。特に、条件が複雑な場合や、範囲をチェックする必要がある場合は、if-else文を使用した方が明確になります。以下のようなケースを考えてみましょう。

int score = 85;

if (score <= 90) {
    System.out.println("優");
} else if (score <= 80) {
    System.out.println("良");
} else if (score <= 70) {
    System.out.println("可");
} else {
    System.out.println("不可");
}

このように、条件が数値の範囲に基づいている場合は、if-else文の方が直感的です。switch文とif-else文は、それぞれの特徴を理解し、適切に使い分けることが重要です。

まとめ

Javaのswitch文は、条件分岐をシンプルに実現するための強力なツールです。特に多くの選択肢がある場合に可読性を高めることができ、プログラムの保守性も向上します。今回の記事では、switch文の基本構文や実践的な使用例、注意点について解説しました。これらを参考にして、自分のプログラムに活用してみてください。プログラミングの学習において、switch文をマスターすることは非常に大切です。ぜひ、実際に手を動かして、理解を深めていきましょう!

コメント

タイトルとURLをコピーしました