Cou氏の徒然日記

ほのぼの日記ブログです。

Java の学習 (switch文のアロー演算子表記)

Java

今回はswitch文の新たな書式について。

 

★ アロー演算子

Javaには、「ラムダ式」というものが登場し、その時に「アロー演算子」が登場したようです。

ラムダ式」では以下のように記載します。

( 引数 ) -> { 処理 ;}

この「->」「アロー演算子と呼ぶようです。

 

★ switch文で「->」(アロー演算子) を使う :  Java SE 12〜?

もともとの

  var month = 1;
  switch (month) {
      case 12:
      case 1:
      case 2:
          System.out.println(month + ": winter");
          break;
      case 3:
      case 4:
      case 5:
          System.out.println(month + ": spring");
          break;              
      case 6:
      case 7:
      case 8:
          System.out.println(month + ": summer");
          break;              
      case 9:
      case 10:
      case 11:
          System.out.println(month + ": autumn");
          break;              
      default:
          System.out.println(month + ": error!");
  }    

break文で区切らないと、次のcase文の処理も突入するなどもありますし、分岐が多くなるとコード行数も増えて、ちょっと見づらい感はあります。

 

ただ、上記のような構文でVSCode上で書くと、Convertできますよというメッセージが出ていたので、

実際にコンバートしてみると…

var month = 1;
switch (month) {
    case 12, 1, 2 -> System.out.println(month + ": winter");
    case 3, 4, 5 -> System.out.println(month + ": spring");
    case 6, 7, 8 -> System.out.println(month + ": summer");
    case 9, 10, 11 -> System.out.println(month + ": autumn");
    default -> System.out.println(month + ": error!");
 }        

すごく見やすくなりました。

「case」句の条件も、複数を併記形式でまとめて記載できて、それをアロー演算子を使って、処理をそのまま書けるので、可読性もいいですね。

 

また、switch文からswitch式になったことで、戻り値を返せるようになります。

なので、以下のように書き換えることも可能なようです。

var month2 = 4;
System.out.println(switch (month2) {
        case 12, 1, 2 -> month2 + ": winter";
        case 3, 4, 5 -> month2 + ": spring";
        case 6, 7, 8 -> month2 + ": summer";
        case 9, 10, 11 -> month2 + ": autumn";
        default -> month2 + ": error!";
});

 

前のものと上の書き換え後のものを並べて実行してみると…

 ---------------------------------
 1: winter
 ---------------------------------
 4: spring
 ---------------------------------

きちんと標準出力ができています。

これはうまく使うことで色々とできそうです。

 

Javaも昔に比べると色々と改良されていますね。