ja-JP/about_Continue.help.txt
|
TOPIC about_Continue 簡単な説明 プログラムフローをループ、switch、trap の先頭へ戻す continue ステートメント について説明します。 詳細な説明 continue ステートメントは、現在の制御ブロックを抜けつつ、完全に終了する のではなく実行を継続する方法を提供します。continue はラベルをサポートします。 ラベルとは、スクリプト内のステートメントに割り当てる名前のことです。 ループでの continue の使用 ラベルなしの continue ステートメントは、for、foreach、do、while の各 ステートメントによって制御される最も内側のループの先頭に、プログラム フローを直ちに戻します。現在の反復は終了し、ループは次の反復で続行されます。 次の例では、$ctr 変数が 5 に等しい場合、プログラムフローが while ループの 先頭に戻ります。その結果、5 を除く 1 から 10 までのすべての数値が表示されます。 while ($ctr -lt 10) { $ctr += 1 if ($ctr -eq 5) { continue } Write-Host -Object $ctr } for ループを使う場合、実行は <Repeat> ステートメントへ続き、その後に <Condition> のテストが行われます。下の例では、$i の減算が continue キーワードの後ろにあるため、無限ループにはなりません。 # <Init> <Condition> <Repeat> for ($i = 0; $i -lt 10; $i++) { Write-Host -Object $i if ($i -eq 5) { continue # Will not result in an infinite loop. $i-- } } ループでのラベル付き continue の使用 ラベル付きの continue ステートメントは、その反復の実行を終了し、ターゲット となる、囲んでいる反復または switch ステートメントのラベルへ制御を移します。 次の例では、$condition が True のときに最も内側の for が終了し、labelB の 2 番目の for ループで反復が続行されます。 :labelA for ($i = 1; $i -le 10; $i++) { :labelB for ($j = 1; $j -le 10; $j++) { :labelC for ($k = 1; $k -le 10; $k++) { if ($condition) { continue labelB } else { $condition = Update-Condition } } } } switch ステートメントでの continue の使用 switch 内のラベルなしの continue ステートメントは、現在の switch の反復の 実行を終了し、次の入力項目を取得するために switch の先頭へ制御を移します。 入力項目が 1 つだけの場合、continue は switch ステートメント全体を抜けます。 switch の入力がコレクションの場合、switch はコレクションの各要素をテスト します。continue は現在の反復を抜け、switch は次の要素で続行されます。 switch (1,2,3) { 2 { continue } # moves on to the next element, 3 default { $_ } } 1 3 trap ステートメントでの continue の使用 trap ステートメントの本体で最後に実行されるステートメントが continue で ある場合、捕捉されたエラーは静かに無視され、trap を発生させたステートメント の直後のステートメントから実行が続行されます。 ループ・switch・trap の外で continue を使わないこと continue が、それを直接サポートする構文(ループ、switch、trap)の外で 使われると、PowerShell は呼び出しスタックをさかのぼって、囲んでいる構文を 探します。囲んでいる構文が見つからない場合、現在のランスペースは静かに 終了します。 つまり、それをサポートする構文の外で誤って continue を使った関数や スクリプトは、その呼び出し元を意図せず終了させてしまうことがあります。 ForEach-Object のスクリプトブロックなど、パイプラインの内側で continue を 使うと、パイプラインを抜けるだけでなく、ランスペース全体を終了させる おそれがあります。 関連項目 about_Break about_Comparison_Operators about_For about_Throw about_Trap about_Try_Catch_Finally ---- 原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP |