¿Es válido usar break en estructuras de control repetitivas?

publicado por: Anonymous

Recientemente, he estado viendo varios ejemplos de código en C++ donde se tiene algo como lo siguiente:

//líneas de código
for (i = 0; i < n; i++)
{
   if((alguna_condición))
   {
      //más código
      break;
   }
}
//siguen más líneas de código

En mis clases de C++ solo he utilizado la instrucción break con la estructura condicional switch y por eso me sorprendió un poco el uso de break con la estructura repetitiva for. Buscando en Google encontré los siguientes enlaces, sin embargo lo único que he conseguido es confundirme. Según lo que he leído, para algunos usar break no tiene nada de malo, pero para otros es tan malo como usar el infame goto.

Básicamente, mi pregunta, como indica el título, es si es correcto usar break en estructuras de control repetitivas, y en caso de que no, ¿es tan “dañino” como usar goto?.

Gracias de antemano por comentarios y/o respuestas.

solución

Es perfectamente válido; esa es su misión, salir del bloque de código actual; mas concretamente, su uso se limita a los bloques:

  • switch
  • do
  • while
  • for

No es válido para salir de bloques if (que no estén contenidos en alguno de los bloques anteriores):

if( x ) {
  if( x == 5 ) break; // INCORRECTO.

Ni tampoco para scopes anónimos (igualmente, que no estén contenidos en ninguno de los bloques válidos):

{
  int z = 2;
  break; // INCORRECTO.

Tampoco permite salir de bloques anidados:

while( x ) {
  while( y ) {
    if( y == 5 )
      break;
  }
  // el break nos manda aquí; solo el bloque interior.
}

En ese ejemplo, break sale del bloque mas interno; es decir, solo funciona para el bloque en el que está incluido.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *