É uma boa prática criar nova variável para ver a saída de uma função?

8

Considere estes 2 tipos de implementação:

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;
}

Um colega meu diz que a segunda implementação é melhor porque, durante a depuração, vemos a variável que mysteriousAddretorna e não é demais sobrecarregar a criação dessa variável extra na pilha. Eu acho que a primeira implementação é melhor e seu ponto não é tão válido, porque hoje a maioria dos compiladores pode mostrar qual é a resposta da função durante a depuração sem a variável extra e também estamos evitando a criação de variável extra na pilha.

A criação de variável de referência na pilha é uma operação barata? Qual dos 2 métodos acima você sugere que é melhor para codificação e por quê?

kai
fonte
2
Pergunta semelhante para C #: softwareengineering.stackexchange.com/questions/141711/… , quase uma duplicata.
Doc Brown

Respostas:

16

Se você comparar a saída assembly / bytecode / IL / etc de duas funções como essa, deverá encontrar as duas iguais. Todos os compiladores, com exceção da maioria das empresas, otimizarão o valor extra.

Portanto, qualquer consideração sobre desempenho / memória deve ser descartada.

Portanto, faça sua escolha em relação à legibilidade. No exemplo, não há realmente nenhum valor para identificar o valor de retorno antes de retornar. No entanto, se você estiver na parte inferior de um cálculo de 20 linhas ou algo assim, geralmente poderá valer a pena criar o valor nomeado antes de retornar, porque esse nome pode indicar ao leitor informações sobre o que o cálculo deve resultar.

whatsisname
fonte
4
Costumo criar variáveis ​​estritamente desnecessárias, pois é possível definir um ponto de interrupção e verificar o valor que está prestes a ser retornado.
Simon B
3
@ SimonB, outra abordagem para evitar a "variável de depuração" é escrever testes. Os testes removerão 90% do tempo de depuração.
Fabio
@Fabio, exceto, claro, quando o teste falhar e você precisa de depuração e, em seguida, você sair a variável que você possa definir um ponto de ruptura: D
Hangman4358
1
@ Hangman4358 verdadeiro em 10% do tempo :) Mas nos testes você sempre terá um consumidor que afirmará o resultado da saída, por isso sempre pegarei o valor retornado no nível do teste. E se você tiver testes específicos, saberá qual foi o motivo de falhas nos testes;)
Fabio
Se eu tenho um local, eu (quase) sempre volto (porque não tê-lo seria mais complexo), geralmente eu o chamo result(talvez abreviado). Esse nome realmente diz tudo.
Deduplicator
1

Demonstre em seu ambiente de programação que você pode ler o resultado da chamada de função sem uma variável tão fácil quanto a variável temporária. Estou usando o que considero um bom ambiente de codificação e não posso.

Então demonstre. Se você puder, seu colega aprendeu alguma coisa. Se você não pode, você aprendeu alguma coisa.

gnasher729
fonte