Considere estos 2 tipos de implementación:
public int add(int x, int y) {
return mysteriousAdd(x, y);
}
public int add(int x, int y) {
int output = mysteriousAdd(x, y);
return output;
}
Un colega mío dice que la segunda implementación es mejor porque durante la depuración podemos ver la variable que mysteriousAdd
regresa y no es una gran carga para crear esa variable adicional en la pila. Creo que la primera implementación es mejor y su punto no es tan válido porque hoy la mayoría de los compiladores pueden mostrar cuál es la respuesta de la función durante la depuración sin la variable adicional y también estamos evitando la creación de una variable adicional en la pila.
¿La creación de variables de referencia en la pila es una operación barata? ¿Cuál de los 2 métodos anteriores sugeriría que es mejor para codificar y por qué?
Respuestas:
Si compara el resultado de ensamblaje / bytecode / IL / etc. de dos funciones como esa, debería encontrar que ambas son iguales. Todos menos los compiladores de Bush League optimizarán el valor extra.
Por lo tanto, cualquier consideración de rendimiento / memoria debe descartarse
Por lo tanto, haga su elección con respecto a la legibilidad. En el ejemplo, realmente no hay ningún valor para identificar el valor de retorno antes de regresar. Sin embargo, si se encuentra en la parte inferior de un cálculo de 20 líneas o algo así, a menudo puede valer la pena crear el valor con nombre antes de regresar, porque ese nombre puede indicarle al lector información sobre lo que se supone que debe generar el cálculo.
fuente
result
(quizás abreviado). Ese nombre realmente lo dice todo.Demuestre en su entorno de programación que puede leer el resultado de la llamada a la función sin una variable exactamente igual de fácil sin la variable temporal. Estoy usando lo que creo que es un buen entorno de codificación, y no puedo.
Entonces demuéstralo. Si puedes, tu colega ha aprendido algo. Si no puedes, has aprendido algo.
fuente