シグネチャ
{switch
value [complete] [using compare]
[case e1 do statements]
[case e1, e2 do statements]
[else statements]
}
単一の式と、複数の可能な一致の比較に基づいて、コード ブロックに実行をスイッチします。
説明
最初の case 句に含まれている e1 のケースの時の statements を実行します。それは compare で指定された機能 (既定では == です) を使用して value と一致したケースとなります。case 句と一致するものが無い場合は、else の statements が存在する場合、実行されます。value 式は 1 度だけ評価されることが保証されています。つまり、ケース式を比較する毎に実行されません。
complete キーワードは
value のコンパイル時の型が
列挙型 の時にのみ使用できます。このような場合、case の記述で型が省略されている要素がある場合エラーが発生します。
value のコンパイル時の型が列挙型の時、EnumType.element-name を使用することで列挙型要素を完全に指定することに加えて、"element-name" の文字列を使用することで単に要素を指定できます。以下の例を参照して下さい。
value のコンパイル時の型が数値型、文字型、列挙型、
String 型、
using 句が指定されていない、全ての case 式がコンパイル時に定数の時、ほとんどの比較がスキップされるため switch は効率的な結果となります。そうでないなら、switch 式は
if /
elseif 式の挙動とパフォーマンスと同等となります。
戻り値
switch 式は通常、
else 句を含んでいるか、全ての
case 句が値を生成する時のみ値を生成します。そうでなければ (
throw か
error 構文を使用して) 例外をスローします。値は実行された句の最後の式から得られた結果になります。
value 式が
列挙型 で case が全てのとりうる値をカバーする場合、 switch 式は
else 句を含まなくても値を生成します。
例
このサンプルは列挙型での swicth 構文を使用しています。
- 全ての値を制御することを保証するために complete キーワードの使用。
- 文字リテラルを使用した列挙型の値を指定する機能。
- 全ての値について制御する場合、else 句を使わないで列挙型の swicth 式で値を生成する機能。
例:
列挙型の switch 式 |
 |
{define-enum public E a, b, c}
{define-proc {e-switch e:E}:String
{return
{switch e complete
case E.a do
"a"
case "b" do
"b"
case E.c do
"c"
}
}
}
{e-switch E.b}
| |
using 句を含むさらに多くの例や詳細については、『Curl 開発者ガイド』の
条件式の構成 を参照してください。
改訂
以下の機能が Curl 7.0 で追加されました。
- complete キーワード。
- 文字リテラルを使用して列挙型の値を指定する機能。
- 列挙型で complet switch において else 句の省略。
- 一部の switch でより効率的なコード生成機能。