switch ステートメント
構文は次のとおりです。
when の値は、1 つの値、複数の値、または sObject 型のいずれかになります。次に例を示します。
switch ステートメントでは、式が評価されて、一致する when の値のコードブロックが実行されます。一致する値がない場合、when else コードブロックが実行されます。when else ブロックがない場合、アクションは実行されません。
- Integer
- Long
- sObject
- String
- Enum
when ブロック
各 when ブロックには、式と照合する値が含まれます。これらの値には、次のいずれかの形式を使用できます。
- when literal {} (when ブロックに複数のカンマ区切りのリテラル句を使用可能)
- when SObjectType identifier {}
- when enum_value {}
値 null はすべての型で有効な値です。
各 when 値は一意である必要があります。たとえば、リテラル x は 1 つの when ブロック句でのみ使用できます。when ブロックは 1 回のみ照合されます。
when else ブロック
式に一致する when 値がない場合、when else ブロックが実行されます。
when else ブロックを含める場合、switch ステートメントの最後のブロックにする必要があります。
リテラルでの例
リテラル when 値を使用して、Integer、Long、String 型を切り替えることができます。文字列の句は大文字と小文字を区別します。たとえば、「orange」は「ORANGE」とは異なる値です。
次の例では、when 値に整数リテラルを使用します。
Apex のすべての型は null にすることができるため、when 値を null にできます。
Apex switch ステートメントはフォールスルーしませんが、when 句に照合する複数のリテラル値を含めることができます。Apex switch ステートメントをネストして、when 句内で複数の実行パスを提供することもできます。
可変式で切り替える代わりに、次の例ではメソッドコールの結果で切り替えます。
sObject での例
sObject 値で切り替える場合、instanceof チェックとキャストを暗黙的に実行できます。たとえば、if-else ステートメントを使用する次のコードがあるとします。
このコードを次の switch ステートメントで置き換えて簡略化できます。
列挙での例
列挙 when 値を使用する switch ステートメントでは when else ブロックは必須ではありませんが、使用することをお勧めします。when ブロック句ごとに複数の列挙値を使用できます。