Creo que eliminar break
puede ser una buena idea, pero no para guardar líneas de código.
La ventaja de escribirlo sin break
es que la condición posterior del bucle es obvia y explícita. Cuando finaliza el bucle y ejecuta la siguiente línea del programa, su condición de bucle i < array.length && !condition
debe haber sido falsa. Por lo tanto, o i
fue mayor o igual que la longitud de tu matriz, o condition
es verdadero.
En la versión con break
, hay un gotcha oculto. La condición del bucle dice que el bucle termina cuando se ejecuta algún otro código para cada índice de matriz válido, pero de hecho hay una declaración break
que podría terminar el haga un ciclo antes de eso, y no lo verá a menos que revise el código del bucle con mucho cuidado. Y los analizadores estáticos automatizados, incluidos los optimizadores de compilación, también podrían tener problemas para deducir cuáles son las condiciones posteriores del bucle.
Esta fue la razón original por la que Edgar Dijkstra escribió "Goto Considered Harmful". No fue una cuestión de estilo: salir de un bucle hace que sea difícil razonar formalmente sobre el estado del programa. He escrito muchas declaraciones de break;
en mi vida, y una vez como adulto, incluso escribí un goto
(para romper los múltiples niveles de un bucle interno de rendimiento crítico y luego continuar con otra rama del árbol de búsqueda). ). Sin embargo, es mucho más probable que escriba una sentencia condicional return
desde un bucle (que nunca ejecuta el código después del bucle y, por lo tanto, no puede eliminar sus condiciones posteriores) que un break
.
Postscript
De hecho, refactorizar el código para dar el mismo comportamiento podría necesitar más líneas de código. Su refactorización podría ser válida para algún otro código en particular, o si podemos probar que condition
comenzará en falso. Pero su ejemplo es equivalente en el caso general a:
if ( array.length > 0 ) {
// Some other code.
}
for ( int i = 1; i < array.length && !condition; i++ ) {
// Some other code.
}
Si algún otro código no es de una sola línea, entonces puede moverlo a una función para que no se repita, y luego casi ha reformulado su bucle en una cola -función recursiva.
Reconozco que este no fue el punto principal de tu pregunta, y lo mantuviste simple.