2011-02-06 14 views
7

Douglas Crockfod dice que generalmente es mejor refactorizar el continue dentro del ciclo.¿Por qué continuar en un ciclo es una mala idea?

¿Por qué se continúa considerando malo dentro de un bucle?

+0

ver también [Continúe de anidado, mientras que los bucles] (http://stackoverflow.com/ preguntas/1133408/continue-in-nested-while-loops). Hay muy poco que sea específico de C#, y muchas de las respuestas proporcionadas allí son excelentes. –

Respuesta

1

El efecto de continue es de alguna manera comparable a goto al comienzo del ciclo. Por lo tanto, hace que su código sea más difícil de entender, como goto s.

+7

-1 'if (...) {...} ...' es algo comparable a un 'goto' al final del bloque. En serio, ignorar ciegamente cualquier cosa que se parezca remotamente a un caso especializado de 'goto' es tan dañino como el uso excesivo de estructuras de control inadecuadas (por ejemplo, usar' goto' cuando existe una estructura de control de nivel superior para el problema en cuestión). – delnan

+0

@delnan Hay una gran diferencia entre la ramificación condicional hacia abajo y la ramificación no condicional hacia arriba. Si alguna vez lees código de ensamblaje complejo, sabrás por qué. Dicho esto, usar 'goto' en realidad puede ser aceptable, pero solo para la derivación no condicional hacia abajo. A diferencia de 'continue', que está roto por diseño, ya que siempre se ramifica hacia arriba. La presencia de 'continue' es siempre una indicación de un bucle mal escrito, cada bucle que lo usa puede reescribirse de una mejor manera. – Lundin

7

El uso de continue significaría que tiene condiciones insuficientes escritas en su while.

En su lugar, debe utilizar if dentro de su while bucle, o agregue la condición en el while bucle.

+2

+1 * Este * es el motivo (solo sano) para evitar 'continuar' (* en la mayoría de los casos *, no todo el tiempo). – delnan

+0

-1 Solo decir "porque' si' es mejor "no responde la pregunta en absoluto. – twiz

4

El uso de goto, break, continue, throw o return dentro del cuerpo del loop puede tener también el efecto no deseado. Aquí hay otro ejemplo donde el control de bucle y el cuerpo del bucle están estrechamente entrelazados. ¿Escribe 1, 2 y 3 como antes? ¿Estás seguro?

int value = 1; 
    for (;;++value) 
    { 
     cout << value << endl; 
     if (value != 4) 
      continue; 
     else 
      break; 
    } 

Tal vez esté pensando que aconsejarle que no use declaraciones de devolución dentro de los cuerpos de bucle es demasiado celoso. ¿Realmente lo digo en serio? Si, lo hago. Las funciones que devuelven algo deben hacerlo a través de una declaración de retorno única al final de la función. Aquí hay algunas razones prácticas por las que:

Link

de responsabilidad: No es mi materia, he hace referencia de nuevo a la fuente

Cuestiones relacionadas