【Java】Switch文の使い方を紹介するよ!こんな風にして可読性上げよう
Javaのswitch文は条件によって異なる処理を選択するための構文で、特定の条件分岐においてコードの可読性とメンテナンス性を向上させるために効果的です
いくつかの使い方を紹介します
1. Enum型との組み合わせ
switch文はenum型と相性が良く、enumの各値に応じた処理を簡潔に定義できます
enumと組み合わせることで、条件が増えた際にもコンパイルエラーで知らせてくれるため、コードのメンテナンスが容易です
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public void printDayType(Day day) {
switch (day) {
case SATURDAY, SUNDAY -> System.out.println("It's a weekend!");
default -> System.out.println("It's a weekday.");
}
}
2. ラムダ式やメソッド参照と一緒に使用する
Java 12以降、switch文でラムダ式やメソッド参照を利用した簡潔な記法が使えるようになりました
各ケースでメソッド参照を呼び出すことで、処理が分散せず、コードが見やすくなります
public void executeOperation(String operation) {
switch (operation) {
case "add" -> this::add;
case "delete" -> this::delete;
case "update" -> this::update;
default -> () -> System.out.println("No operation matched");
}.run();
}
private void add() { System.out.println("Add operation"); }
private void delete() { System.out.println("Delete operation"); }
private void update() { System.out.println("Update operation"); }
3. 複数のケースで同じ処理を実行する
複数の値で同じ処理を実行したい場合、カンマ区切りで記述することが可能です(Java 12以降)
似た処理をまとめられるため、コードがスッキリし、可読性が向上します
public void printSeason(String month) {
switch (month) {
case "December", "January", "February" -> System.out.println("Winter");
case "March", "April", "May" -> System.out.println("Spring");
case "June", "July", "August" -> System.out.println("Summer");
case "September", "October", "November" -> System.out.println("Autumn");
default -> System.out.println("Unknown month");
}
}
4. yieldで値を返す(Java 13以降)
switch文を式として使用し、値を返すことができます
yieldキーワードを使用して各ケースの処理結果を返せるため、より簡潔に記述できます
関数の戻り値としてswitchを使うことで、冗長なコードを避けられます
public String getDayType(Day day) {
return switch (day) {
case SATURDAY, SUNDAY -> "Weekend";
default -> "Weekday";
};
}
5. switch式でロジックを分岐させる
Java 12以降のswitch式を使うと、複雑な条件分岐を簡潔に書けるため、コードのメンテナンスが楽になります
返り値として使用でき、各ケースで値を直接返せるので、コードの見通しが良くなります
public int calculate(int a, int b, String operator) {
return switch (operator) {
case "+" -> a + b;
case "-" -> a - b;
case "*" -> a * b;
case "/" -> a / b;
default -> throw new IllegalArgumentException("Invalid operator");
};
}
是非参考にしてみてください!
是非フォローしてください
最新の情報をお伝えします