Búsqueda de sitios web

Acerca de Continuar


Breve descripción

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 forma de salir del bloque de control actual pero continuar la ejecución, en lugar de salir por completo. La declaración admite etiquetas. Una etiqueta es un nombre que usted asigna a una declaración en un guión.

Usando continuar en bucles

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

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

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

    Write-Host -Object $ctr
}

Cuando se utiliza un bucle for, la ejecución continúa en la instrucción <Repeat>, seguida de la prueba <Condition>. En el siguiente ejemplo, no se producirá un bucle infinito porque la disminución de $i ocurre 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--
    }
}

Usando un continuar etiquetado en un bucle

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

En el siguiente ejemplo, el for más interno finaliza cuando $condition es True y la iteración continúa con el segundo for bucle 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
            }
        }
    }
}

Usando continuar en una declaración de cambio

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

Cuando hay un único elemento de entrada, continue sale de 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 siguiente elemento.

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

Usar continuar en una declaración trampa

Si la declaración final ejecutada en el cuerpo de una declaración trap es continue, el error atrapado se ignora silenciosamente y la ejecución continúa con la declaración inmediatamente posterior a la que causó la trampa para que ocurra.

No utilice continuar fuera de un bucle, interruptor o trampa.

Cuando se usa continue 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 puede encontrar una construcción envolvente, el espacio de ejecución actual finaliza silenciosamente.

Esto significa que las funciones y scripts que inadvertidamente utilizan un continue fuera de una construcción envolvente que lo admite, pueden terminar inadvertidamente a sus llamadores.

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

Ver también

  • acerca de_romper
  • about_Comparison_Operadores
  • acerca de_Para
  • acerca de_tirar
  • acerca de_Trampa
  • about_Try_Catch_Finalmente

Artículos relacionados