Ist es eine gute Praxis, eine neue Variable zu erstellen, um die Ausgabe einer Funktion zu sehen?

8

Betrachten Sie diese zwei Arten der Implementierung:

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

Ein Kollege von mir sagt, dass die zweite Implementierung besser ist, da wir beim Debuggen die zurückgegebene Variable sehen mysteriousAddund es kein großer Aufwand ist, diese zusätzliche Variable im Stapel zu erstellen. Ich denke, die erste Implementierung ist besser und sein Standpunkt nicht so gültig, da die meisten Compiler heute zeigen können, wie die Funktion während des Debuggens ohne die zusätzliche Variable reagiert, und wir vermeiden auch die Erstellung einer zusätzlichen Variablen im Stapel.

Ist die Erstellung von Referenzvariablen im Stapel eine billige Operation? Welche der beiden oben genannten Methoden ist für die Codierung besser geeignet und warum?

kai
quelle
2
Ähnliche Frage für C #: softwareengineering.stackexchange.com/questions/141711/… , fast ein Duplikat.
Doc Brown

Antworten:

16

Wenn Sie die Assembly / Bytecode / IL / etc-Ausgabe von zwei solchen Funktionen vergleichen, sollten Sie feststellen, dass beide gleich sind. Alle außer den meisten Compilern in der Buschliga optimieren den Mehrwert.

Daher sollten alle Überlegungen zu Leistung und Speicher verworfen werden.

Treffen Sie also Ihre Wahl hinsichtlich der Lesbarkeit. In diesem Beispiel gibt es wirklich keinen Wert, um den Rückgabewert vor der Rückgabe zu identifizieren. Wenn Sie sich jedoch am Ende einer Berechnung mit 20 Zeilen oder Ähnlichem befinden, kann es sich oft lohnen, den benannten Wert vor der Rückgabe zu erstellen, da dieser Name einem Leser Informationen darüber geben kann, was die Berechnung bewirken soll.

Whatsisname
quelle
4
Ich erstelle oft Variablen, die unbedingt nicht erforderlich sind, da es dann möglich ist, einen Haltepunkt festzulegen und den Wert zu überprüfen, der zurückgegeben werden soll.
Simon B
3
@SimonB, ein anderer Ansatz zur Vermeidung von "Debugging-Variablen" ist das Schreiben von Tests. Durch Tests werden 90% der Debugging-Zeit entfernt.
Fabio
@Fabio, außer natürlich, wenn Ihr Test fehlschlägt und Sie debuggen müssen und dann die Variable ausbrechen, damit Sie einen Haltepunkt setzen können: D
Hangman4358
1
@ Hangman4358 wahr in 10% der Zeit :) Aber in Tests haben Sie immer einen Verbraucher, der das Ausgabeergebnis bestätigt, so dass ich immer den zurückgegebenen Wert auf Testebene abfange. Und wenn Sie bestimmte Tests haben, dann werden Sie wissen, was ein Grund für fehlgeschlagene Tests war;)
Fabio
Wenn ich ein lokales Ich habe (fast) immer zurück (weil es komplexer wäre, es nicht zu haben), nenne ich es im Allgemeinen result(vielleicht abgekürzt). Dieser Name sagt wirklich alles.
Deduplikator
1

Zeigen Sie in Ihrer Programmierumgebung, dass Sie das Ergebnis des Funktionsaufrufs ohne Variable genauso einfach lesen können wie ohne die temporäre Variable. Ich verwende eine meiner Meinung nach recht gute Codierungsumgebung und kann das nicht.

Also zeig es. Wenn Sie können, hat Ihr Kollege etwas gelernt. Wenn Sie nicht können, haben Sie etwas gelernt.

gnasher729
quelle