¿Diferencia entre declarar variables antes o en bucle?

Resuelto Rabarberski asked hace 15 años • 26 respuestas

Siempre me he preguntado si, en general, declarar una variable desechable antes de un bucle, en lugar de hacerlo repetidamente dentro del bucle, hace alguna diferencia (de rendimiento). Un ejemplo (bastante inútil) en Java:

a) declaración antes del bucle:

double intermediateResult;
for(int i=0; i < 1000; i++){
    intermediateResult = i;
    System.out.println(intermediateResult);
}

b) declaración (repetidamente) dentro del bucle:

for(int i=0; i < 1000; i++){
    double intermediateResult = i;
    System.out.println(intermediateResult);
}

¿Cuál es mejor, a o b ?

Sospecho que la declaración repetida de variables (ejemplo b ) crea más gastos generales en teoría , pero los compiladores son lo suficientemente inteligentes como para que no importe. El ejemplo b tiene la ventaja de ser más compacto y limitar el alcance de la variable al lugar donde se utiliza. Aún así, tiendo a codificar según el ejemplo a .

Editar: estoy especialmente interesado en el caso de Java.

Rabarberski avatar Jan 02 '09 23:01 Rabarberski
Aceptado

¿Cuál es mejor, a o b ?

Desde una perspectiva de rendimiento, habría que medirlo. (Y en mi opinión, si puedes medir la diferencia, el compilador no es muy bueno).

Desde una perspectiva de mantenimiento, b es mejor. Declare e inicialice variables en el mismo lugar, en el ámbito más estrecho posible. No deje un gran vacío entre la declaración y la inicialización, y no contamine los espacios de nombres que no necesite.

Daniel Earwicker avatar Jan 02 '2009 16:01 Daniel Earwicker

Bueno, ejecuté los ejemplos A y B 20 veces cada uno, repitiendo 100 millones de veces (JVM - 1.5.0).

A: tiempo medio de ejecución: 0,074 segundos

B: tiempo medio de ejecución: 0,067 segundos

Para mi sorpresa, B fue un poco más rápido. A pesar de lo rápidas que son las computadoras ahora, es difícil decir si se puede medir esto con precisión. También lo codificaría en forma A, pero diría que realmente no importa.

Mark avatar Jan 02 '2009 16:01 Mark