Salesforce 認定 Platform デベロッパー 無料問題 4 / 10 ・ 分野2: プロセスの自動化とロジック
次の Apex を実行した。 Integer i = 3; String out = ''; switch on i { when 2, 3, 4 { out += 'A'; } when 5 { out += 'B'; } when else { out += 'C'; } } System.debug(out); デバッグログに出る値はどれか。
- AB が出力される
- ABC が出力される
- AC が出力される
- A が出力される
正解と解説を見る
正解: D
正解の理由
Apex 開発者ガイドの「Switch Statements」は、switch が式を評価し、一致した when のコードブロックを実行すると書いている。一致しなければ when else が実行される。フォールスルーは無く、コードブロックを実行し終えると switch を抜ける。1つの when にはカンマで区切って複数の値を書ける。i は 3 なので when 2, 3, 4 だけが実行され、out は A になる。
違う選択肢
「ABC が出力される」… switch は式に一致した when のコードブロックを1つ実行して抜ける。when の値も、1つの when で一致するのは多くても1回である。
「AC が出力される」… when else は、どの when の値にも一致しなかったときだけ実行される。3 は when 2, 3, 4 に一致しているので、when else には進まない。
「AB が出力される」… Java の switch の break を忘れたときのように、次の when に流れ落ちると考えた値である。ガイドは Apex の switch にフォールスルーは無いと書いている。
押さえどころ
複数の値で同じ処理をしたいときは、Java のように when を並べて流れ落ちさせるのではなく、1つの when に値を並べる。switch の式に使える型は Integer・Long・sObject・String・Enum で、when else は置くなら最後にする。