Soll ich Variablen wiederverwenden?
Ich weiß, dass viele Best Practices besagen, dass Sie dies nicht tun sollten, aber später, wenn verschiedene Entwickler den Code debuggen und 3 Variablen haben, die gleich aussehen, und der einzige Unterschied darin besteht, dass sie an verschiedenen Stellen im Code erstellt werden, könnte dies der Fall sein verwirrt. Unit-Tests sind ein gutes Beispiel dafür.
Ich weiß jedoch , dass Best Practices die meiste Zeit dagegen sind. Sie sagen beispielsweise, dass Methodenparameter nicht "überschrieben" werden sollen.
Es wird sogar empfohlen, die vorherigen Variablen nicht auf null zu setzen (in Java gibt es Sonar, das eine Warnung ausgibt, wenn Sie null
eine Variable zuweisen , dass dies nicht erforderlich ist, um den Garbage Collector seit Java 6 aufzurufen. Sie können nicht immer steuern welche Warnungen deaktiviert sind, meistens ist die Standardeinstellung aktiviert.)
quelle
Antworten:
Ihr Problem wird nur angezeigt, wenn Ihre Methoden lang sind und mehrere Aufgaben in einer Sequenz ausführen. Dies erschwert das Verständnis (und somit die Pflege) des Codes an sich. Das Wiederverwenden von Variablen erhöht das Risiko zusätzlich, sodass der Code noch schwerer zu befolgen und fehleranfälliger ist.
Die IMO-Best-Practice besteht darin, Methoden zu verwenden, die kurz genug sind und nur eines tun, um das gesamte Problem zu beseitigen.
quelle
result1 = foo(); result2 = foo(); Assert.AreEqual(result1, result2);
ich nicht viele Stellen sehe, an denen Sie in diesem Fall eine Variable wiederverwenden müssten.Die Wiederverwendung von Variablen in einer Methode ist ein starkes Zeichen dafür, dass Sie sie umgestalten / aufteilen sollten.
Meine Antwort wäre also, dass Sie sie nicht wiederverwenden sollten, denn wenn Sie dies tun, wäre es umso schwieriger, sie später umzugestalten.
quelle
Es hängt davon ab, ob.
Einige Variablen können genau zum Speichern einer bestimmten Art von Daten erstellt werden, die sich während der Ausführung einer Funktion ändern können. Ich erinnere mich hier an Rückkehrcodes, zum Beispiel:
Der Variablenname macht sehr deutlich, was diese Variable speichern soll. Ich denke, dass andere Verwendungszwecke wie dieser möglich sind, bei denen eine Variable konzeptionell ein Container ist, der von verschiedenen Instanzen sehr ähnlicher Dinge im Verlauf einer Funktion logisch verwendet wird.
Im Allgemeinen sollte dies jedoch nur unter Umständen erfolgen, bei denen es für mögliche Leser des Codes absolut klar ist. In keinem Fall sollte eine Variable wiederverwendet werden, nur weil der Typ passt.
All dies ergibt sich im Wesentlichen aus guten Praktiken bei der Benennung von Variablen. Namen sollten für sich selbst sprechen. Wenn es schwierig ist, den genauen Zweck für alle Wiederverwendungen in einem kurzen Namen anzugeben, ist es am besten, nur unterschiedliche Variablen zu verwenden.
quelle
Der Hauptgrund, warum ich keine Variablen wiederverwende (insbesondere bei Unit-Tests), ist die Einführung eines unnötigen Codepfads, der schwer zu testen und zu debuggen ist. Ein guter Komponententest sollte unabhängig von anderen Tests sein. Wenn Sie Klassenvariablen (Instanzenvariablen) in einem Komponententestgerät wiederverwenden, müssen Sie sicherstellen, dass vor jedem Test deren Status bestätigt wird. Ein guter Komponententest isoliert auch Fehler, so dass theoretisch jeder Testfall (Methode) nur 1 Verhalten für das zu testende System bestätigen sollte. Wenn Ihre Testmethoden so geschrieben sind, ist die Wiederverwendung einer Variablen auf Methodenebene selten erforderlich oder sinnvoll. Schließlich ist es in Sprachen, die Closures und asynchrone Verarbeitung unterstützen, wirklich schwierig zu überlegen, was zum Teufel passiert, wenn Sie Variablen in einer Methode wiederverwenden.
quelle
Sie sollten verschiedene Variablen verwenden. Wenn Sie befürchten, dass Ihr Kollege verwirrt wird, geben Sie ihm Namen, die eindeutig seine Rollen abdecken.
Die Wiederverwendung von Variablen kann in Zukunft zu Verwirrung führen. es ist besser, es jetzt aufzuklären.
In einigen Fällen kann derselbe Variablenname wiederverwendet werden. zum Beispiel
i
in einer einfachen Zählschleife. In diesen Fällen sollten Sie natürlich sicherstellen, dass sich die Variablen in ihrem eigenen Bereich befinden.BEARBEITEN: Die Wiederverwendung von Variablen ist manchmal ein Zeichen dafür, dass das Prinzip der einfachen Verantwortung verletzt wird. Überprüfen Sie, ob die wiederverwendete Variable in derselben Rolle verwendet wird. Wenn dies der Fall ist, kann es möglicherweise überhaupt nicht wiederverwendet werden (obwohl es immer noch vorzuziehen ist, zwei verschiedene Variablen zu haben, um den Umfang dieser Variablen einzuschränken). Wenn es in verschiedenen Rollen verwendet wird, liegt eine SRP-Verletzung vor.
quelle
Es gibt eine Situation, in der Sie eine Variable möglicherweise wiederverwenden möchten, ungeachtet der guten Ratschläge anderer Antworten: Wenn Ihr Compiler eine helfende Hand benötigt.
In einigen Fällen kann es sein, dass Ihr Compiler nicht klug genug ist, um zu erkennen, dass eine bestimmte vom Register zugewiesene Variable im nächsten Teil des Codes nicht mehr verwendet wird. Daher wird dieses theoretisch freie Register für die nächsten Variablen nicht wiederverwendet, und der generierte Code ist möglicherweise nicht optimal.
Beachten Sie, dass ich keine aktuellen Mainstream-Compiler kenne, die diese Situation nicht richtig erfassen. Tun Sie dies also niemals, es sei denn, Sie wissen, dass Ihr Compiler suboptimalen Code generiert. Wenn Sie mit benutzerdefinierten Compilern für spezielle eingebettete Systeme kompilieren, tritt dieses Problem möglicherweise weiterhin auf.
quelle
Ich würde NEIN sagen.
Denken Sie an dieses Szenario: Ihr Programm ist abgestürzt und Sie müssen herausfinden, was bei der Überprüfung eines Core-Dumps passiert ist. Können Sie den Unterschied erkennen? ;-)
quelle
Nein, Sie verbessern nicht den Code, den der Computer ausführt (... den Assembly-Code). Belassen Sie die Wiederverwendung des vom Compiler für die Variable verwendeten Speichers beim Compiler. Ziemlich oft wird es ein Register sein, und die Wiederverwendung hat dir nichts gekauft. Konzentrieren Sie sich darauf, den Code besser lesbar zu machen.
quelle
Es hängt davon ab, ob. In einer dynamischen Sprache, in der der Typ eher auf Werten als auf Variablen basiert, hätte ich ein Argument mit gutem Namen für eine Funktion, die zum Beispiel eine Zeichenfolge war. Wenn ich den Algorithmus ändere, bedeutet dies, dass er immer verwendet wurde, nachdem er als Ganzzahl interpretiert wurde. Als ersten Entwurf könnte ich dann das Äquivalent von tun
scrote = int (scrote)
Aber ich würde eventuell versuchen, den an die Funktion gesendeten Typ zu ändern und die Änderung des Parametertyps zu vermerken.
quelle
Schauen Sie sich zunächst Ihre Entwicklungsumgebung an. Wenn Sie Probleme beim Debuggen haben, weil Sie fünf Variablen in unterschiedlichen Bereichen mit identischen Namen haben und der Debugger Ihnen nicht anzeigt, welche dieser Variablen Sie benötigen, verwenden Sie keine fünf Variablen mit demselben Namen. Dies kann auf zwei Arten erreicht werden: Verwenden Sie eine Variable oder fünf verschiedene Namen.
Ihr Debugger kann es auch schmerzhaft machen, eine Funktion mit vielen Variablen zu debuggen. Wenn eine Funktion mit 20 Variablen schwerer zu debuggen ist als eine mit 16 Variablen, können Sie 5 Variablen durch eine ersetzen. ("Könnte berücksichtigen" ist nicht dasselbe wie "sollte immer").
Es ist in Ordnung, eine Variable an mehreren Stellen zu verwenden, solange die Variable immer denselben Zweck hat. Wenn beispielsweise zehn Funktionsaufrufe einen Fehlercode zurückgeben, der sofort für jeden Aufruf verarbeitet wird, verwenden Sie eine Variable und nicht 10. Verwenden Sie dieselbe Variable jedoch nicht für völlig unterschiedliche Dinge. Wenn Sie beispielsweise "name" für einen Kundennamen und 10 Zeilen später dieselbe Variable für einen Firmennamen verwenden, ist das schlecht und bringt Sie in Schwierigkeiten. Schlimmer noch: Verwenden Sie "customerName" für einen Kundennamen und 10 Zeilen später dieselbe Variable "customerName" für einen Firmennamen.
Wichtig ist, dass nichts eine eiserne Regel ist. Alles hat Vor- und Nachteile. Wenn "Best Practices" eine Sache nahelegen und Sie Gründe haben zu sagen, dass es in Ihrer spezifischen Situation eine schlechte Idee ist, dann tun Sie es nicht.
quelle
Schauen Sie sich zunächst Ihre Entwicklungsumgebung an. Wenn Sie Probleme beim Debuggen haben, weil Sie fünf Variablen in unterschiedlichen Bereichen mit identischen Namen haben und der Debugger Ihnen nicht anzeigt, welche dieser Variablen Sie benötigen, verwenden Sie keine fünf Variablen mit demselben Namen. Dies kann auf zwei Arten erreicht werden: Verwenden Sie eine Variable oder fünf verschiedene Namen.
Ihr Debugger kann es auch schmerzhaft machen, eine Funktion mit vielen Variablen zu debuggen. Wenn eine Funktion mit 20 Variablen schwerer zu debuggen ist als eine mit 16 Variablen, können Sie 5 Variablen durch eine ersetzen. ("Könnte berücksichtigen" ist nicht dasselbe wie "sollte immer").
Es ist in Ordnung, eine Variable an mehreren Stellen zu verwenden, solange die Variable immer denselben Zweck hat. Wenn beispielsweise zehn Funktionsaufrufe einen Fehlercode zurückgeben, der bei jedem Aufruf sofort behandelt wird, verwenden Sie eine Variable und nicht 10. Hierbei gibt es ein Problem: Normalerweise teilt Ihnen der Compiler mit, wann Sie eine nicht initialisierte Variable verwenden. Wenn Sie jedoch nach Aufruf 6 den Fehlercode lesen, die Variable jedoch nach Aufruf 5 nicht geändert wurde, erhalten Sie unbrauchbare Daten, ohne dass der Compiler Sie warnt. Da die Variable mit Daten initialisiert wurde, die jetzt unbrauchbar sind.
Wichtig ist, dass nichts eine eiserne Regel ist. Alles hat Vor- und Nachteile. Wenn "Best Practices" eine Sache nahelegen und Sie Gründe haben zu sagen, dass es in Ihrer spezifischen Situation eine schlechte Idee ist, dann tun Sie es nicht.
quelle
Verwenden Sie globale Variablen, wenn Sie einen Status verwalten oder Konstanten speichern müssen. Durch die Wiederverwendung von Variablen wird nur der Name wiederverwendet, der auf eine Position im Speicher verweist. Beschreibende Namen bei Initialisierungen können Ihnen nur Klarheit verschaffen (vorausgesetzt, Java und kein primitives OCD).
Es sei denn, Sie befassen sich mit Code-Verschleierung von Hand oder irritieren andere Entwickler.
quelle