Creo que eliminarlo break
puede ser una buena idea, pero no para guardar líneas de código.
La ventaja de escribir sin él break
es que la condición posterior del bucle es obvia y explícita. Cuando finaliza el ciclo y ejecuta la siguiente línea del programa, su condición de ciclo i < array.length && !condition
debe haber sido falsa. Por lo tanto, i
era mayor o igual que la longitud de su matriz, o condition
es cierto.
En la versión con break
, hay una trampa oculta. La condición del bucle dice que el bucle termina cuando ha ejecutado algún otro código para cada índice de matriz válido, pero de hecho hay una break
declaración que podría terminar el bucle antes de eso, y no lo verá a menos que revise el código del bucle. muy cuidadosamente. Y los analizadores estáticos automáticos, incluida la optimización de compiladores, 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 Considerado Dañino". No fue una cuestión de estilo: romper un círculo hace que sea difícil razonar formalmente sobre el estado del programa. He escrito muchas break;
declaraciones en mi vida, y una vez como adulto, incluso escribí un goto
(para salir de múltiples niveles de un ciclo interno crítico para el rendimiento y luego continuar con otra rama del árbol de búsqueda). Sin embargo, es mucho más probable que escriba una return
declaración condicional desde un bucle (que nunca ejecuta el código después del bucle y, por lo tanto, no puede acumular sus condiciones posteriores) que a break
.
Posdata
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 demostrar 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, puede moverlo a una función para que no se repita, y casi ha refactorizado su bucle en una función recursiva de cola.
Sin embargo, reconozco que este no era el punto principal de su pregunta, y lo mantenía simple.
condition
en particular.