はじめに
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("例外");
}
		
// 80switch式
次に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文を使わなくなるかと言うと、
そうでもないので、それぞれの特性は把握しておいた方が良いと思います。
ここまで読んでいただき、ありがとうございます。
 
  
  
  
  

コメント