C # loop – break vs. continue

En un ciclo C # (no dude en responder para otros idiomas), ¿cuál es la diferencia entre break y continue como medio para abandonar la estructura del ciclo, y pasar a la siguiente iteración?

Ejemplo:

foreach (DataRow row in myTable.Rows) { if (someConditionEvalsToTrue) { break; //what's the difference between this and continue ? //continue; } } 

    break saldrá por completo del loop, continue saltará la iteración actual.

    Por ejemplo:

     for (int i = 0; i < 10; i++) { if (i == 0) { break; } DoSomeThingWith(i); } 

    La ruptura hará que el bucle salga en la primera iteración: DoSomeThingWith nunca se ejecutará. Esto aqui:

     for (int i = 0; i < 10; i++) { if(i == 0) { continue; } DoSomeThingWith(i); } 

    No ejecutará DoSomeThingWith para i = 0 , pero el ciclo continuará y DoSomeThingWith se ejecutará para i = 1 a i = 9 .

    Una forma realmente fácil de entender esto es colocar la palabra “loop” después de cada una de las palabras clave. Los términos ahora tienen sentido si solo se leen como frases cotidianas.

    break loop – looping está roto y se detiene.

    continue loop – loop continúa ejecutándose con la siguiente iteración.

    romper hace que el contador del progtwig salte fuera del scope del ciclo más interno

     for(i = 0; i < 10; i++) { if(i == 2) break; } 

    Funciona así

     for(i = 0; i < 10; i++) { if(i == 2) goto BREAK; } BREAK:; 

    Continúa saltando hasta el final del ciclo. En un ciclo for, continúe saltando a la expresión de incremento.

     for(i = 0; i < 10; i++) { if(i == 2) continue; printf("%d", i); } 

    Funciona así

     for(i = 0; i < 10; i++) { if(i == 2) goto CONTINUE; printf("%d", i); CONTINUE:; } 

    break detendría por completo el ciclo foreach , continue saltaría al siguiente DataRow .

    Hay más de unas pocas personas a las que no les gusta el break y continue . La última queja que vi sobre ellos fue en JavaScript: The Good Parts, de Douglas Crockford. Pero me parece que a veces el uso de uno de ellos realmente simplifica las cosas, especialmente si su lenguaje no incluye un estilo do-while o do-until de loop.

    Tiendo a usar bucles de entrada que buscan una lista para algo. Una vez encontrado, no tiene sentido continuar, por lo que es mejor que renuncie.

    Uso continue cuando hago algo con la mayoría de los elementos de una lista, pero aún quiero omitir algunos.

    La statement de break también es útil cuando se busca una respuesta válida de alguien o algo. En lugar de:

     Ask a question While the answer is invalid: Ask the question 

    Podrías eliminar algunas duplicaciones y usar:

     While True: Ask a question If the answer is valid: break 

    El ciclo do-until que mencioné antes es la solución más elegante para ese problema en particular:

     Do: Ask a question Until the answer is valid 

    Sin duplicación, y tampoco break necesita break .

    Todos han dado una muy buena explicación. Todavía estoy publicando mi respuesta solo para dar un ejemplo si eso puede ayudar.

     // break statement for (int i = 0; i < 5; i++) { if (i == 3) { break; // It will force to come out from the loop } lblDisplay.Text = lblDisplay.Text + i + "[Printed] "; } 

    Aquí está el resultado:

    0 [Impreso] 1 [Impreso] 2 [Impreso]

    Por lo tanto, 3 [Impreso] y 4 [Impreso] no se mostrarán ya que hay interrupción cuando yo == 3

     //continue statement for (int i = 0; i < 5; i++) { if (i == 3) { continue; // It will take the control to start point of loop } lblDisplay.Text = lblDisplay.Text + i + "[Printed] "; } 

    Aquí está el resultado:

    0 [Impreso] 1 [Impreso] 2 [Impreso] 4 [Impreso]

    Entonces 3 [Impreso] no se mostrará ya que hay continuación cuando i == 3

    Solía ​​confundirme siempre si debía usar break o continue. Esto es lo que me ayuda a recordar:

    Cuándo usar break vs. continue?

    1. Break – es como romperse. Es triste, ustedes se están despidiendo.

    Descanso

    1. Continuar – significa que vas a dar hoy un descanso y ordenarlo todo mañana (es decir, omita la iteración actual).

    Continuar

    Descanso

    Break forza un ciclo para salir de inmediato.

    Continuar

    Esto hace lo contrario de romper. En lugar de terminar el ciclo, inmediatamente se repite, omitiendo el rest del código.

    Por ejemplo

     foreach(var i in Enumerable.Range(1,3)) { Console.WriteLine(i); } 

    Imprime 1, 2, 3 (en líneas separadas).

    Agregue una condición de corte en i = 2

     foreach(var i in Enumerable.Range(1,3)) { if (i == 2) break; Console.WriteLine(i); } 

    Ahora el ciclo imprime 1 y se detiene.

    Reemplace la ruptura con a continue.

     foreach(var i in Enumerable.Range(1,3)) { if (i == 2) continue; Console.WriteLine(i); } 

    Ahora para repetir las impresiones 1 y 3 (omitiendo 2).

    Por lo tanto, break detiene el ciclo, mientras que continue salta a la siguiente iteración.

    Ruby lamentablemente es un poco diferente. PD: Mi memoria es un poco confusa en esto, así que me disculpo si me equivoco

    en lugar de break / continue, tiene break / next, que se comportan igual en términos de bucles

    Los bucles (como todo lo demás) son expresiones y “devuelven” lo último que hicieron. La mayoría de las veces, obtener el valor de retorno de un ciclo no tiene sentido, por lo que todo el mundo lo hace

     a = 5 while a < 10 a + 1 end 

    Sin embargo, puedes hacer esto

     a = 5 b = while a < 10 a + 1 end # b is now 10 

    SIN EMBARGO, una gran cantidad de código de Ruby 'emula' un bucle mediante el uso de un bloque. El ejemplo canónico es

     10.times do |x| puts x end 

    Como es mucho más común que las personas quieran hacer cosas con el resultado de un locking, aquí es donde se vuelve complicado. break / next significa cosas diferentes en el contexto de un bloque.

    break saltará del código que llamó al bloque

    a continuación, se saltará el rest del código en el bloque y 'devolverá' lo que usted especifique a la persona que llama del bloque. Esto no tiene ningún sentido sin ejemplos.

     def timesten 10.times{ |t| puts yield t } end timesten do |x| x * 2 end # will print 2 4 6 8 ... and so on timesten do |x| break x * 2 end # won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped timesten do |x| break 5 x * 2 end # This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5 timesten do |x| next 5 x * 2 end # this would print 5 5 5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5. 

    Así que sí. Ruby es increíble, pero tiene algunos casos de esquina terribles. Este es el segundo peor que he visto en mis años de uso 🙂

    Respuesta simple:

    Break sale del ciclo inmediatamente.
    Continuar comienza a procesar el siguiente elemento. (Si hay alguno, saltando a la línea de evaluación de for / while)

    Permítame indicar lo obvio: tenga en cuenta que al agregar ni interrumpir ni continuar, se reanudará su progtwig; es decir, atrapado por un cierto error, luego de iniciar sesión, quería reanudar el procesamiento, y había más tareas de código entre la siguiente fila, así que simplemente lo dejé pasar.

    Para romper completamente un bucle foreach, se usa el break ;

    Para ir a la siguiente iteración en el ciclo, continue se usa;

    Break es útil si está recorriendo una colección de Objetos (como Filas en una Tabla de Datos) y está buscando una coincidencia en particular, cuando encuentra esa coincidencia, no hay necesidad de continuar a través de las filas restantes, por lo que desea romper fuera.

    Continuar es útil cuando ha logrado lo que necesita en una iteración de ciclo lateral. Normalmente, continuarás luego de un if .

    si no desea utilizar el salto , simplemente aumente el valor de I de tal forma que haga que la condición de iteración sea falsa y el bucle no se ejecutará en la siguiente iteración.

     for(int i = 0; i < list.Count; i++){ if(i == 5) i = list.Count; //it will make "i 

    En cuanto a otros idiomas:

     'VB For i=0 To 10 If i=5 then Exit For '= break in C#; 'Do Something for i<5 next For i=0 To 10 If i=5 then Continue For '= continue in C# 'Do Something for i<>5... Next