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