条件分岐

Java – switch-caseで複数条件を効率よくまとめる書き方を解説

Javaのswitch-case文では、複数の条件を効率よくまとめるために、同じ処理を行うケースをカンマで区切ることができます(Java 12以降の「スイッチ式」を使用する場合)。

従来のswitch-caseでは、複数のcaseを連続して記述し、最後に共通の処理を記述する方法が一般的です。

例えば、case 1, 2, 3:のように記述することで、条件を簡潔にまとめられます。

switch-case文とは

switch-case文は、Javaにおいて特定の値に基づいて異なる処理を実行するための制御構文です。

条件分岐を行う際に、if-else文と同様の役割を果たしますが、複数の条件を効率的に扱うことができるため、可読性が向上します。

特に、同じ変数の異なる値に対して異なる処理を行う場合に便利です。

基本構文

以下は、switch-case文の基本的な構文です。

switch (変数) {
    case 値1:
        // 値1に対する処理
        break;
    case 値2:
        // 値2に対する処理
        break;
    default:
        // どのcaseにも該当しない場合の処理
}

特徴

  • 可読性: 複数の条件を一つの構文でまとめることができ、コードが見やすくなります。
  • 効率性: 特定の値に基づいて処理を分岐させるため、条件が多い場合でも効率的に処理できます。
  • デフォルトケース: どの条件にも該当しない場合の処理をdefaultで指定できます。

このように、switch-case文は条件分岐を簡潔に表現できるため、特に多くの選択肢がある場合に有用です。

次のセクションでは、従来のswitch-case文で複数条件をまとめる方法について詳しく解説します。

従来のswitch-case文で複数条件をまとめる方法

従来のswitch-case文では、同じ処理を複数の条件に対して適用することができます。

これにより、コードの重複を避け、可読性を向上させることが可能です。

以下に、複数の条件をまとめる方法を解説します。

基本的な使い方

複数のcaseをまとめて、同じ処理を実行することができます。

以下のサンプルコードを見てみましょう。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerのインスタンスを作成
        System.out.print("数字を入力してください (1-3): ");
        int number = scanner.nextInt(); // ユーザーからの入力を取得
        switch (number) {
            case 1:
            case 2:
            case 3:
                // 1, 2, 3のいずれかが入力された場合
                System.out.println("入力された数字は1, 2, または3です。");
                break;
            default:
                // それ以外の数字が入力された場合
                System.out.println("無効な数字です。1から3の範囲で入力してください。");
        }
        scanner.close(); // Scannerを閉じる
    }
}
  • Scannerクラスを使用して、ユーザーからの入力を受け取ります。
  • switch文で、入力された数字に基づいて処理を分岐します。
  • case 1, case 2, case 3をまとめて、同じ処理を実行しています。
  • defaultケースでは、無効な入力に対するメッセージを表示します。

このプログラムを実行し、1、2、または3を入力すると、以下のような出力が得られます。

数字を入力してください (1-3): 2
入力された数字は1, 2, または3です。

無効な数字を入力した場合は、次のような出力になります。

数字を入力してください (1-3): 5
無効な数字です。1から3の範囲で入力してください。

このように、従来のswitch-case文を使用することで、複数の条件を効率的にまとめて処理することができます。

次のセクションでは、Java 12以降のswitch式の活用について解説します。

Java 12以降のswitch式の活用

Java 12以降、switch文は新しいswitch式として進化しました。

この新しい構文は、より簡潔で柔軟な条件分岐を可能にし、特に複数の条件をまとめる際に便利です。

以下に、switch式の特徴と使い方を解説します。

switch式の基本構文

新しいswitch式では、caseの後に->を使用して処理を記述します。

また、yieldキーワードを使って値を返すこともできます。

以下は基本的な構文です。

switch (変数) {
    case 値1 -> {
        // 値1に対する処理
    }
    case 値2 -> {
        // 値2に対する処理
    }
    default -> {
        // どのcaseにも該当しない場合の処理
    }
}

以下のサンプルコードでは、switch式を使用して、曜日に応じたメッセージを表示します。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerのインスタンスを作成
        System.out.print("曜日を入力してください (月, 火, 水, 木, 金, 土, 日): ");
        String day = scanner.nextLine(); // ユーザーからの入力を取得
        String message = switch (day) {
            case "月" -> "新しい週の始まりです。";
            case "火" -> "火曜日です。頑張りましょう!";
            case "水" -> "水曜日です。折り返し地点です。";
            case "木" -> "木曜日です。もう少しです。";
            case "金" -> "金曜日です。週末が近い!";
            case "土", "日" -> "週末です。リラックスしましょう!";
            default -> "無効な曜日です。正しい曜日を入力してください。";
        };
        System.out.println(message); // メッセージを表示
        scanner.close(); // Scannerを閉じる
    }
}
  • Scannerクラスを使用して、ユーザーから曜日を入力してもらいます。
  • switch式を使用して、入力された曜日に応じたメッセージを生成します。
  • caseの後に->を使い、処理を簡潔に記述しています。
  • は、同じ処理をまとめて記述しています。
  • 最後に、生成されたメッセージを表示します。

このプログラムを実行し、例えば「金」と入力すると、以下のような出力が得られます。

曜日を入力してください (月, 火, 水, 木, 金, 土, 日): 金
金曜日です。週末が近い!

無効な曜日を入力した場合は、次のような出力になります。

曜日を入力してください (月, 火, 水, 木, 金, 土, 日): 火曜日
無効な曜日です。正しい曜日を入力してください。

このように、Java 12以降のswitch式を活用することで、より簡潔で可読性の高いコードを書くことができます。

次のセクションでは、switch-case文を効率化するためのベストプラクティスについて解説します。

switch-case文を効率化するためのベストプラクティス

switch-case文を使用する際に、コードの可読性や保守性を向上させるためのベストプラクティスをいくつか紹介します。

これらのポイントを押さえることで、より効率的なプログラミングが可能になります。

同じ処理をまとめる

複数のcaseで同じ処理を行う場合は、caseをまとめて記述することでコードを簡潔にできます。

以下のように、同じ処理を持つcaseをグループ化します。

switch (value) {
    case 1:
    case 2:
    case 3:
        // 1, 2, 3のいずれかの場合の処理
        break;
    default:
        // その他の処理
}

デフォルトケースを活用する

defaultケースを使用して、どのcaseにも該当しない場合の処理を明示的に記述します。

これにより、予期しない入力に対するエラーハンドリングが容易になります。

switch (input) {
    case "A":
        // Aの場合の処理
        break;
    case "B":
        // Bの場合の処理
        break;
    default:
        // 無効な入力の場合の処理
        System.out.println("無効な入力です。");
}

定数を使用する

caseで使用する値は、定数として定義することで、コードの可読性を向上させることができます。

これにより、値の変更が容易になり、バグを防ぐことができます。

public static final int OPTION_ONE = 1;
public static final int OPTION_TWO = 2;
switch (option) {
    case OPTION_ONE:
        // OPTION_ONEの場合の処理
        break;
    case OPTION_TWO:
        // OPTION_TWOの場合の処理
        break;
}

switch式を活用する

Java 12以降では、switch式を使用することで、より簡潔に条件分岐を記述できます。

yieldを使って値を返すこともできるため、処理の結果を変数に格納する際に便利です。

String result = switch (input) {
    case "A" -> "選択肢Aが選ばれました。";
    case "B" -> "選択肢Bが選ばれました。";
    default -> "無効な選択肢です。";
};

複雑なロジックはメソッドに分割する

switch-case文の中に複雑なロジックが含まれる場合は、その処理を別のメソッドに分割することで、可読性を向上させることができます。

これにより、switch-case文自体がシンプルになり、保守性が向上します。

switch (command) {
    case "start":
        startProcess(); // 別メソッドに処理を分割
        break;
    case "stop":
        stopProcess(); // 別メソッドに処理を分割
        break;
}

これらのベストプラクティスを活用することで、switch-case文をより効率的に使用し、可読性や保守性の高いコードを書くことができます。

次のセクションでは、実践例として複数条件を効率よく処理するコードを紹介します。

実践例:複数条件を効率よく処理するコード

ここでは、switch-case文を使用して複数の条件を効率よく処理する実践例を示します。

この例では、ユーザーが入力した月に基づいて、その月の季節を判定し、メッセージを表示します。

以下のコードは、ユーザーから月を入力してもらい、その月が属する季節を表示するプログラムです。

import java.util.Scanner; // Scannerクラスをインポート
public class App {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // Scannerのインスタンスを作成
        System.out.print("月を入力してください (1-12): ");
        int month = scanner.nextInt(); // ユーザーからの入力を取得
        String season = switch (month) {
            case 12, 1, 2 -> "冬"; // 12月、1月、2月は冬
            case 3, 4, 5 -> "春"; // 3月、4月、5月は春
            case 6, 7, 8 -> "夏"; // 6月、7月、8月は夏
            case 9, 10, 11 -> "秋"; // 9月、10月、11月は秋
            default -> "無効な月です。1から12の範囲で入力してください。"; // 無効な入力
        };
        System.out.println("入力された月の季節は: " + season); // 季節を表示
        scanner.close(); // Scannerを閉じる
    }
}
  • Scannerクラスを使用して、ユーザーから月の入力を受け取ります。
  • switch式を使用して、入力された月に基づいて季節を判定します。
  • caseの後に,を使って、複数の条件をまとめて記述しています。
  • defaultケースでは、無効な入力に対するメッセージを表示します。
  • 最後に、判定された季節を表示します。

このプログラムを実行し、例えば 4 と入力すると、以下のような出力が得られます。

月を入力してください (1-12): 4
入力された月の季節は: 春

無効な月を入力した場合は、次のような出力になります。

月を入力してください (1-12): 13
入力された月の季節は: 無効な月です。1から12の範囲で入力してください。

この実践例を通じて、switch-case文を使用して複数の条件を効率よく処理する方法を学ぶことができました。

switch式を活用することで、より簡潔で可読性の高いコードを書くことが可能です。

まとめ

この記事では、Javaにおけるswitch-case文の基本的な使い方から、複数条件を効率よくまとめる方法、さらにJava 12以降の新しいswitch式の活用法までを振り返りました。

特に、switch-case文を効率化するためのベストプラクティスを取り入れることで、より可読性の高いコードを書くことが可能になります。

これを機に、実際のプログラミングにおいてswitch-case文やswitch式を積極的に活用し、より効率的な条件分岐を実現してみてください。

関連記事

Back to top button