@hiroki-shosinsher

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

switch文とswitch式

解決したいこと

switch文とswitch式をどう区別するのか教えてください

該当するソースコード

public class Sample{
    public static void main(String[] args){
        int a = 2;
        switch(a){
            case 1 -> System.out.println("A");
            case 2 -> System.out.println("B");
            case 3 -> System.out.println("C");
            default -> System.out.println("D");
        };
    }
}

疑問点

上のコードではswitch式として記述されているらしいのですが、switch文なのでは?と思っています。

理由

・switch式は何らかの値を返すために使う(変数の代入やSystem.out.println(switch(a))など)が、上のコードではそのような使い方はしていない。
・14行目のセミコロンはswitch式では必須だが、switch文には使わない(?)
・defaultはswitch式では必須だが、switch文でも使えるため判断基準にならない
・アロー演算子はswitch文でもswitch式でも使えるため判断基準にはならない。

以上のことから、switch式で「Bと表示される」が正解の問題ですが、switch文なので、「14行目でコンパイルエラー」が正しいと思うのですが、私の考えのどこが間違っていますでしょうか。

0 likes

1Answer

文の末尾に余計なセミコロンがあっても無視されるだけなのでコンパイルは通る、という点で間違っています。

しかし switch 式というのもおかしいように思います。式なら以下のように全体をカッコでくくってもいいはずですが、「文ではありません」とコンパイルエラーが出ます。これは一般的にこの位置に式を書くことはできないからです。(1 + 2; などに置き換えても同じエラーが出ることからも分かります。)よって質問のコードでは switch 文として解釈されていると考えるべきです。

    public static void main(String[] args){
        int a = 2;
        (switch(a){
     // ^ エラー: 文ではありません
            case 1 -> System.out.println("A");
            case 2 -> System.out.println("B");
            case 3 -> System.out.println("C");
            default -> System.out.println("D");
        });
    }
0Like

Your answer might help someone💌