about_Switch
トピック
about_Switch
簡易説明
switch を使用して複数の If ステートメントを処理する方法について説明します。
詳細説明
if ステートメントは、スクリプトまたはプログラムでなんらかの判断を下すために使用します。基本的
には、"この条件が満たされている場合は、このアクションを実行する。それ以外の場合は、別のアクションを
実行する" ということを意味します。この処理は必要に応じて何回でも実行できますが、条件が多くなると、if ステートメントで
は対処しきれなくなります。多数の条件を 1 つの switch ステートメントにまとめることができます。この場
合、他の分岐ステートメントと同様、スクリプト ブロックを中かっこ ({}) で囲む必要があります。
switch ステートメントは、事実上は一連の if ステートメントです。switch ステートメントは、式
と各条件を個別に照合します。一致するものが見つかると、その条件に関連付けられたアクションが実行
されます。基本的な switch ステートメントは、次のような形式になります。
PS> $a = 3
PS> switch ($a) {
1 {"It is one."}
2 {"It is two."}
3 {"It is three."}
4 {"It is four."}
}
It is three.
この簡単な例では、1 つの値が与えられ、その値とリスト内の各条件が比較されます。条件が一致した文
字列のエコーを表示するアクションが実行されます。ただし、すべての条件をチェックする場合に、問題
に直面する可能性があります。次にその例を示します。
PS> $day = "day5"
PS> switch ($day){
day1 {"Monday"; break}
day2 {"Tuesday"; break}
day3 {"Wednesday"; break}
day4 {"Thursday"; break}
day5 {"Friday"; break}
day6 {"Saturday"; break}
day7 {"Sunday"; break}
day5 {"Too many days"; break}
}
Friday
このリストには、2 つの day5 条件があります。しかし、各条件の最後にある break によって、
switch ステートメントの処理が終了し、条件の一致したアクションが実行されます。break ステート
メントがない場合は、両方の day5 アクションが実行されます。
switch の条件で比較される値が配列である場合は、配列内の各要素が要素 0 (ゼロ) から順に評価さ
れます。少なくとも 1 つの要素が、少なくとも 1 つの条件と一致する必要があります。一致しない
と、エラーになります。default 句が複数存在すると、エラーになります。
完全な switch 構文は次のとおりです。
switch [-regex|-wildcard|-exact][-casesensitive] (パイプライン)
または
switch [-regex|-wildcard|-exact][-casesensitive] -file filename
次の文が続きます。
{
"string"|number|variable|{ expression } { statementlist }
default { statementlist }
}
パラメーターが使用されていない場合、switch は、既定で、大文字と小文字を区別しない正確な照合
が実施される case と同様に機能します。"パイプライン" の結果が配列になる場合は、その配列の各要
素がオフセットの昇順 (ゼロから始まります) に評価されます。
switch コード ブロックには、少なくとも 1 つの条件要素を含める必要があり、default 句は 1
つしか含めることができません。default 句が複数存在する場合は、ParseException がスローされ
ます。
switch には次のパラメーターがあります。
Regex 比較対象の句が文字列の場合に正規表現文字列として扱われることを意味します。
このパラメーターを使用すると、Wildcard と Exact は無効になります。
比較対象の句が文字列ではない場合、このパラメーターは無視されます。
Wildcard 比較対象の句が文字列の場合にワイルドカード文字列として扱われることを意味します。
このパラメーターを使用すると、Regex と Exact は無効になります。比較対象の
句が文字列ではない場合、このパラメーターは無視されます。
Exact 比較対象の句が文字列の場合は、完全に一致する必要があることを意味します。
このパラメーターを使用すると、Wildcard と Regex は無効になります。比較対
象の句が文字列ではない場合、このパラメーターは無視されます。
CaseSensitive 比較対象の句が文字列の場合は、大文字と小文字を区別するように変更します。
比較対象の句が文字列ではない場合、このパラメーターは無視されます。
File ステートメントではなく、ファイル (またはユーザー) から入力を受け取ります。
複数の File パラメーターを指定すると、最後の 1 つが使用されます。ファイル
が 1 行ずつ読み込まれ、switch ブロックをとおして渡されます。
Regex、Wildcard、または Exact を複数指定することができます。ただし、動作を制御するのは最後
のパラメーターだけです。
キーワードの Break は、これ以上処理が行われず、Switch ステートメントが終了することを意味し
ます。
キーワードの Continue は、現在のトークンに対する処理が終了し、条件内の次のトークンが評価され
ることを意味します。有効なトークンがないと、Switch ステートメントは終了します。
"{ expression }" ブロックは、比較時に評価されるコード ブロックを指定できます。現在のオブジ
ェクトが自動変数の $_ にバインドされ、式の評価中に使用できます。比較は、式が "True" として評価
された場合に一致と見なされます。この式は、新しいスコープで評価されます。
switch ステートメント内の "Default" キーワードは、一致するものが見つからなかった場合に、キ
ーワードに続くコード ブロックが評価されることを意味します。複合リスト内の終わり中かっこ "}"
は明示的な "break" であるので、ブロック間のプログラム フローは許可されません。
一致するものが複数見つかった場合は、一致ごとに式が実行されます。これを回避するには、Break キ
ーワードまたは Continue キーワードを使用して、それ以降の比較を中断します。
関連項目
about_Break
about_Continue
about_If
about_Script_Blocks