はじめに
switch式とは、Java14で新たに追加された構文になります。
従来のswitch文と比べると便利になった点が多くありますので、順番に見ていきましょう。
switch文
まずは、switch文のおさらいとしてサンプルコードを書いてみます。
以下のように、シンプルな分岐でもかなりの行数になってしまいます。
また、break文を書き忘れると次のcaseまで実行されてしまうので、注意が必要でした。
// 変数の定義
int number = 80;
// numberの値によって処理を分岐させる
switch (number) {
case 50:
System.out.println(number);
break;
case 80:
System.out.println(number);
break;
case 100:
System.out.println(number);
break;
default:
System.out.println("例外");
}
// 80
switch式
次にswitch式を使ってみます。
int number = 80;
String result = switch(number) {
case 50 -> "50点です。";
case 70, 80 -> "70点か80点です。";
default -> null;
};
System.out.println(result);
// 70点か80点です。
どうでしょうか?かなりシンプルになりました!
シンプルになっただけではなく、かなり便利になりました。
便利なところ
新構文になり、かなり便利に使用できるようになりました。
面倒でswitch文を避けていた方にとっては革命です。
アロー関数が使える
まず1つ目の便利ポイントは、アロー関数が使えることです。
アロー関数が使えるということは、下記のように複数行の処理を記述することも可能です。
その場合、返却する値に対してyieldキーワードを使用しています。
yieldは簡単に言うと、returnのようなイメージです。
package java20230911;
public class Sample1 {
public static void main(String[] args) {
int number = 50;
String result = switch(number) {
case 50 -> {
int subtraction = 100 - number;
yield "あと" + subtraction + "点足らないよ";
}
case 70, 80 -> "70点か80点です。";
default -> null;
};
System.out.println(result);
// あと50点足らないよ
}
}
break文が不要
この、break文が不要になったのは、かなり嬉しいですよね!
break文忘れが無くなります!
ただ、注意してほしいのが古いシステムの改修をする際にswitch文の特性を忘れないように気を付けましょう!
複数条件をまとめられる
これもかなりの便利です。
switch文では、複数の条件設定ができなかったため、コードが冗長になっていました。
その点をswitch式が改善してくれます。
上記のサンプルコードのようにcaseに続けて、条件をカンマ区切りで記述します。
サンプルコード
では、最後にswitch式を使用したサンプルコードを書いてみます。
ちょっとあんまり良いサンプルが思いつかなかったので、似たようなコードになってしまいました。。
注目してほしいのは条件はint型なのに対して、返却するmessageはString型である部分です。
また、Switch式では、戻り値なしにすることはできませんので注意してください。
このように、switch式を使用することで、従来の書き方よりコード量を削減できます。
package java20230911;
public class Sample1 {
public static void main(String[] args) {
String str = "abcdef";
int baseLength = 8;
String message = switch (str.length()) {
case 1, 2, 3, 4, 5, 6, 7 -> {
int subtraction = baseLength - str.length();
yield str.length() + "文字は短すぎるね!" + subtraction + "文字追加してみましょう!";
}
case 8 -> "ちょうどいいよ!";
default -> "やり直してください!";
};
System.out.println(message);
// 6文字は短すぎるね!2文字追加してみましょう!
}
}
比較する文字列は「abcdef」の6文字。
6文字なので、最初のcase文の分岐に入ります。
その結果がmessageという変数に格納されるので、あとはmessageを出力するだけです。
余談
Java13にて追加されたテキストブロックという機能がありますが、
これはswitch式のラベルとして使うことはできません。
便利なので使いたかったですが、少し残念です。
テキストブロックとは、簡単に言うと複数行の文字のことです。
public class Main {
public static void main(String[] args) {
String textBlock = """
This
is
TextBlock
""";
System.out.println(textBlock);
// This
// is
// TextBlock
}
}
最後に
どうでしたでしょうか?
個人的には、かなり便利になった上、かっこいいので沢山使ってみたいと思います。
ただ、switch文のアップデートというよりは、
また別の機能なので完全にswitch文を使わなくなるかと言うと、
そうでもないので、それぞれの特性は把握しておいた方が良いと思います。
ここまで読んでいただき、ありがとうございます。
コメント