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
式を積極的に活用し、より効率的な条件分岐を実現してみてください。