JavaのSwitch式を理解する

Java_icon Java
この記事は約6分で読めます。

この記事は以下の方を対象に書いています。

  • switch式って聞いたことあるけど何?
  • switch式のサンプルコードをみたい!

はじめに

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文を使わなくなるかと言うと、

そうでもないので、それぞれの特性は把握しておいた方が良いと思います。

ここまで読んでいただき、ありがとうございます。

コメント

タイトルとURLをコピーしました