¿Es una buena práctica crear una nueva variable para ver la salida de una función?

8

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 mysteriousAddregresa 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é?

kai
fuente
2
Pregunta similar para C #: softwareengineering.stackexchange.com/questions/141711/… , casi un duplicado.
Doc Brown

Respuestas:

16

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.

whatsisname
fuente
44
A menudo creo variables que no son estrictamente necesarias, ya que es posible establecer un punto de interrupción y verificar el valor que está a punto de ser devuelto.
Simon B
3
@SimonB, otro enfoque para evitar la "variable de depuración" es escribir pruebas. Las pruebas eliminarán el 90% del tiempo de depuración.
Fabio
@Fabio, excepto, por supuesto, cuando su prueba falla y necesita depurar y luego
divide
1
@ Hangman4358 verdadero en el 10% del tiempo :) Pero en las pruebas siempre tendrá un consumidor que afirmará el resultado de salida, por lo que siempre obtendré el valor devuelto en el nivel de prueba. Y si tiene pruebas específicas, sabrá cuál fue la razón de las pruebas fallidas;)
Fabio
Si tengo un local que (casi) siempre regreso (porque no tenerlo sería más complejo), generalmente lo llamo result(quizás abreviado). Ese nombre realmente lo dice todo.
Deduplicador
1

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.

gnasher729
fuente