He encontrado la siguiente anotación de bucle en un gran proyecto en el que estoy trabajando (pseudocódigo):
var someOtherArray = [];
for (var i = 0, n = array.length; i < n; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
Lo que me llamó la atención es esta variable "n" adicional. Nunca antes había visto un for lop escrito de esta manera.
Obviamente, en este escenario, no hay ninguna razón por la cual este código no se pueda escribir de la siguiente manera (a lo que estoy muy acostumbrado):
var someOtherArray = [];
for (var i = 0; i < array.length; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
Pero me dejó pensando.
¿Hay algún escenario en el que escribir un bucle for tenga sentido? Se me ocurre la idea de que la longitud de la "matriz" puede cambiar durante la ejecución del bucle for, pero no queremos hacer un bucle más allá del tamaño original, pero no puedo imaginar tal escenario.
Reducir la matriz dentro del bucle tampoco tiene mucho sentido, porque es probable que obtengamos OutOfBoundsException.
¿Existe un patrón de diseño conocido donde esta anotación sea útil?
Editar Como señaló @ Jerry101, la razón es el rendimiento. Aquí hay un enlace a la prueba de rendimiento que he creado: http://jsperf.com/ninforloop . En mi opinión, la diferencia no es lo suficientemente grande a menos que esté iterando a través de una matriz muy grande. El código del que lo copié solo tenía hasta 20 elementos, por lo que creo que la legibilidad en este caso supera la consideración de rendimiento.
n
puede ser más lenta que la que usa, array.Length
ya que el JITter podría no notar que podría eliminar las verificaciones de los límites de la matriz.