Compartir a través de


Acerca_de_Continuar

Descripción breve

Describe cómo la instrucción continue devuelve inmediatamente el flujo del programa a la parte superior de un bucle de programa, una instrucción switch o una instrucción trap.

Descripción larga

La instrucción continue proporciona una manera de salir del bloque de control actual, pero continuar la ejecución, en lugar de salir por completo. La instrucción admite etiquetas. Una etiqueta es un nombre que se asigna a una instrucción en un script.

Uso de continue en bucles

Una instrucción continue sin etiquetar devuelve inmediatamente el flujo del programa a la parte superior del bucle más interno controlado por una instrucción for, foreach, doo while. La iteración actual del bucle finaliza y el bucle continúa con la siguiente iteración.

En el ejemplo siguiente, el flujo de programa vuelve a la parte superior del bucle while si la variable $ctr es igual a 5. Como resultado, se muestran todos los números entre 1 y 10, excepto 5:

while ($ctr -lt 10)
{
    $ctr += 1
    if ($ctr -eq 5)
    {
        continue
    }

    Write-Host -Object $ctr
}

Cuando se usa un bucle for, la ejecución continúa en la instrucción <Repeat>, seguido de la prueba <Condition>. En el ejemplo siguiente, no se producirá un bucle infinito porque la disminución de $i se produce después de la palabra clave 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--
    }
}

Uso de continue etiquetado en un bucle

Una instrucción etiquetada como continue finaliza la ejecución de la iteración y transfiere el control a la iteración envolvente de destino o a la etiqueta de la instrucción switch.

En el ejemplo siguiente, el for más interno finaliza cuando $condition es True y la iteración continúa con el segundo bucle de for en labelB.

: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
            }
        }
    }
}

Uso de continue en una instrucción switch

Una instrucción continue sin etiquetar dentro de un switch finaliza la ejecución del switch actual y transfiere el control a la parte superior del switch para obtener el siguiente elemento de entrada.

Cuando hay un solo elemento de entrada, continue finaliza toda la instrucción switch. Cuando la entrada switch es una colección, el switch prueba cada elemento de la colección. El continue sale de la iteración actual y el switch continúa con el elemento siguiente.

switch (1,2,3) {
  2 { continue }  # moves on to the next element, 3
  default { $_ }
}
1
3

Uso de continue en una instrucción trap

Si la última instrucción ejecutada en el cuerpo de una instrucción trap es continue, el error capturado se ignora silenciosamente y la ejecución continúa con la instrucción inmediatamente siguiente a la que provocó que ocurriera trap.

No use continue fuera de un bucle, conmutador o captura

Cuando continue se usa fuera de una construcción que lo admite directamente (bucles, switch, trap), PowerShell busca la pila de llamadas para una construcción envolvente. Si no encuentra una construcción entre llaves, el espacio de ejecución actual finaliza de manera silenciosa.

Esto significa que las funciones y scripts que utilizan involuntariamente continue fuera de una construcción entre llaves que lo admite, pueden terminar involuntariamente sus autores de llamada.

El uso de continue dentro de una canalización, como un bloque de scripts ForEach-Object, no solo sale de la canalización, sino que posiblemente finaliza todo el espacio de ejecución.

Consulte también