En un bucle C # (siéntase libre de responder para otros idiomas), ¿cuál es la diferencia entre romper y continuar como un medio para abandonar la estructura del bucle e ir a la siguiente iteración?
Ejemplo:
foreach (DataRow row in myTable.Rows)
{
if (someConditionEvalsToTrue)
{
break; //what's the difference between this and continue ?
//continue;
}
}
c#
loops
enumeration
Seibar
fuente
fuente
continue;
detendrá el procesamiento de la corrienterow
y continuará con la siguienterow
de la colección. Por otro lado,break;
dejará laforeach
declaración por completo y las filas restantes nunca se procesarán.Respuestas:
break
saldrá del bucle por completo,continue
simplemente saltará la iteración actual.Por ejemplo:
La ruptura hará que el ciclo salga en la primera iteración
DoSomeThingWith
, nunca se ejecutará. Esto aqui:No se ejecutará
DoSomeThingWith
parai = 0
, pero el bucle continuará yDoSomeThingWith
será ejecutado pori = 1
ai = 9
.fuente
Una manera realmente fácil de entender esto es colocar la palabra "bucle" después de cada una de las palabras clave. Los términos ahora tienen sentido si se leen como frases cotidianas.
break
loop: el loop se rompe y se detiene.continue
loop - loop continúa ejecutándose con la siguiente iteración.fuente
break hace que el contador del programa salte fuera del alcance del bucle más interno
Funciona asi
continuar salta al final del ciclo. En un bucle for, continuar salta a la expresión de incremento.
Funciona asi
fuente
for
bucle estándar , pero ¿funcionará esto parawhile
bucles pre y post probados ? Lagoto
notación me lleva a creerlo, pero necesito alguna verificación.while
("pre-probado") ydo
-while
("post-probado"), después decontinue;
que se cumpla una declaración, lo siguiente que sucederá es que se evalúa la condición del bucle para decidir si se debe realizar una iteración adicional. Por supuesto, conbreak;
la condición del bucle no marcada, el bucle simplemente sale completamente. Entonces, lagoto
analogía también es buena para entender este aspecto.Siempre me confundía si debía usar break o continuar. Esto es lo que me ayuda a recordar:
¿Cuándo usar break vs continue?
fuente
break
detendría elforeach
bucle por completo,continue
saltaría al siguienteDataRow
.fuente
Hay más de unas pocas personas a las que no les gusta
break
ycontinue
. La última queja que vi sobre ellos estaba en JavaScript: The Good Parts por Douglas Crockford. Pero me parece que a veces el uso de uno de ellos realmente simplifica las cosas, sobre todo si la lengua no incluye unado-while
odo-until
estilo de bucle.Tiendo a usar
break
en bucles que buscan algo en una lista. Una vez encontrado, no tiene sentido continuar, por lo que es mejor que renuncies.Lo uso
continue
cuando hago algo con la mayoría de los elementos de una lista, pero todavía quiero omitir algunos.La
break
declaración también es útil cuando se busca una respuesta válida de alguien o algo. En vez de:Podría eliminar algunas duplicaciones y usar:
El
do-until
ciclo que mencioné antes es la solución más elegante para ese problema en particular:Sin duplicación, y tampoco es
break
necesario.fuente
Todos han dado una muy buena explicación. Todavía estoy publicando mi respuesta solo para dar un ejemplo si eso puede ayudar.
Aquí está la salida:
Por lo tanto, 3 [Impreso] y 4 [Impreso] no se mostrarán, ya que hay un descanso cuando i == 3
Aquí está la salida:
Por lo tanto, 3 [Impreso] no se mostrará ya que hay continuación cuando i == 3
fuente
Rotura
La ruptura obliga a un bucle a salir inmediatamente.
Seguir
Esto hace lo contrario de descanso. En lugar de terminar el bucle, se repite inmediatamente, omitiendo el resto del código.
fuente
Continue
no es lo contrario debreak
,break
detiene el ciclo,continue
detiene la iteración actual.Respuesta simple:
Break sale del bucle de inmediato.
Continuar comienza a procesar el siguiente elemento. (Si hay alguno, saltando a la línea de evaluación de por / mientras)
fuente
Por ejemplo
Imprime 1, 2, 3 (en líneas separadas).
Agregar una condición de descanso en i = 2
Ahora el bucle imprime 1 y se detiene.
Reemplace el descanso con un continuar.
Ahora para bucle imprime 1 y 3 (omitiendo 2).
Por lo tanto,
break
detiene el ciclo, mientras quecontinue
salta a la siguiente iteración.fuente
Ruby desafortunadamente 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 bucle no tiene sentido, por lo que todo el mundo hace esto
Sin embargo, puedes hacer esto
SIN EMBARGO, una gran cantidad de código ruby 'emula' un bucle utilizando un bloque. El ejemplo canónico es
Como es mucho más común que las personas quieran hacer cosas con el resultado de un bloqueo, aquí es donde se complica. break / next significa cosas diferentes en el contexto de un bloque.
el salto saltará del código que llamó al bloque
siguiente omitirá el resto del código en el bloque y "devolverá" lo que especifique a la persona que llama del bloque. Esto no tiene ningún sentido sin ejemplos.
Así que sí. Ruby es increíble, pero tiene algunos esquinas horribles. Este es el segundo peor que he visto en mis años de usarlo :-)
fuente
Permítanme decir lo obvio: tenga en cuenta que al no agregar ni interrumpir ni continuar, reanudará su programa; es decir, atrapé un cierto error, luego, después de registrarlo, quise reanudar el procesamiento, y hubo más tareas de código entre la siguiente fila, así que simplemente lo dejé pasar.
fuente
Para salir completamente de un bucle foreach, se usa el descanso ;
Para ir a la siguiente iteración en el bucle, se usa continuar ;
El salto es útil si está recorriendo una colección de objetos (como Filas en una tabla de datos) y está buscando una coincidencia particular, cuando encuentra esa coincidencia, no es necesario continuar a través de las filas restantes, por lo que desea dividir fuera.
Continuar es útil cuando ha logrado lo que necesita en una iteración de bucle. Normalmente tendrá que continuar después de un if .
fuente
si no desea usar break , simplemente aumente el valor de I de tal manera que haga que la condición de iteración sea falsa y el bucle no se ejecute en la próxima iteración.
fuente
En cuanto a otros idiomas:
fuente