2010-02-25 2 views

Antwort

7

Die Zuweisung zu einer temporären Variablen vor der Rückgabe gibt Ihnen die Möglichkeit, Fehler in Ihrer newPerson() zu überprüfen und zu korrigieren. Um den neuen Aufruf zurückzugeben, muss der Aufrufer Ihrer newPerson() -Methode Fehler abfangen und wiederherstellen.

+2

Wenn ein weiterer Zugriff auf die Variable erfolgen würde, wäre dies kein Problem, da das Szenario nicht mehr existieren würde. – Robin

+0

Wirklich, ich würde die Existenz dieser Methode insgesamt in einem Code-Review in Frage stellen. Eine einzeilige neue *() Routine, um eine Person mit einigen Standardwerten zurückzugeben? Wenn Sie mit der newPerson() - Routine keine zusätzlichen Funktionen für den Aufruf "new Person()" bereitstellen, ist newPerson() eine Methode mit begrenzter Verwendbarkeit IMO. Warum nicht einfach eine haben: öffentliche Person() {...} Konstruktor? Das Gleiche gilt für die Methodenaufrufschicht. Sie sind gleichermaßen schlechte Wahl für eine Methode, aber mindestens die erste Form gibt Ihnen eine Chance, etwas hilfreich für den Benutzer zu tun, die sie nicht neue Person() selbst aufrufen würde. –

+0

Die Methode in diesem Beispiel ist trivial. Ich bevorzuge es, einfache Beispiele zu verwenden, anstatt eine tatsächliche Methode, die ich im Live-Code verwende, zu posten. – mheathershaw

1

Niemand ist nicht effizienter als der andere, der JIT wird ihn zur Laufzeit am effizientesten ausführen.

0

Einer ist nicht effizienter als der andere, aber die Rückgabe des erstellten Objekts ist wahrscheinlich sauberer, da weniger temporäre Variablen verwendet werden. Wenn Sie temporäre Variablen verwenden müssen, machen Sie es final und benennen Sie es entsprechend.

+0

Bitte klären Sie, wo die temporären Variablen sind. Ich habe immer P instanziiert und eine Referenz auf P zurückgegeben. Wenn Sie P nicht deklarieren, wird ein Objekt noch instanziiert und eine Referenz übergeben. –

+1

Java übergibt Variablen von VALUE es macht eine Kopie von P und P fällt bei der Rückkehr aus dem Geltungsbereich. –

+0

Was @fuzzy sagte. Ein guter Compiler kann die Implementierung optimieren, aber, was den Quellcode angeht, ist "p" eine temporäre Variable. So heißt es einfach. Immer war, wird immer sein. – polygenelubricants

16

Es gibt keinen Unterschied, der Sie in Bezug auf die Leistung über den anderen entscheiden lässt.

  • Aus Gründen der Fehlersuche ist ersteres besser - d. H. Wenn Sie die Ausführung verfolgen oder einige Informationen zwischen Erstellung und Rückgabe protokollieren möchten.
  • Aus Gründen der Lesbarkeit (aber das ist subjektiv) - Letzteres ist besser.
  • Im Allgemeinen würde ich für letzteres empfehlen, und wann immer Sie dies debuggen müssen, machen Sie einen temporären Wechsel zu der ersten (zweizeiligen) Variante.

    +0

    Ich würde argumentieren, dass keiner lesbarer ist als der andere, warum also einen vorübergehenden Wechsel vornehmen? Der Code, den der JIT-Compiler für jedes Muster generiert, ist wahrscheinlich zu 100% identisch. Kein Unterschied. Wenn also das erste Muster überhaupt einen Vorteil hat, egal wie gering es ist, warum nicht einfach verwenden (oder zumindest lassen, sobald Sie die Änderung vorgenommen haben)? –

    +2

    gut, für mich ist es lesbarer, es sofort zurückzugeben. Beim Tracing mit einem Debugger ist es jedoch viel bequemer, es in zwei Zeilen zu haben. Und vielleicht Debugging-Informationen dazwischen. – Bozho

    +3

    Es kommt darauf an, wenn Sie für Lesbarkeit oder Debugfähigkeit optimieren, könnte man argumentieren, dass Code (von Menschen) weit mehr gelesen wird, als es debuggt. –

    0

    Die zweite Option ist kürzer und einfacher zu lesen.

    Ich bezweifle, dass jeder ordentliche Java-Compiler weniger effizienten Code für die erste Option erstellen würde.

    1

    In einer gesunden Welt werden sie auf genau den gleichen Bytecode kompilieren, so dass sie hinsichtlich der Leistung identisch sind. Dann ist der einzige Unterschied für die Menschen:

    eine temporäre Variable macht das Debuggen Erstellen etwas einfacher: Sie einen Haltepunkt auf der return-Anweisung setzen und den Wert von p inspizieren. In der einzeiligen Version ist dies schwieriger zu tun.

    In einer Zeile wird eine Variable eliminiert, wodurch die Komplexität reduziert wird und der Code leicht lesbarer wird.

    In der Praxis würde ich es in einer Zeile schreiben, und im schlimmsten Fall erstelle ich eine temporäre Variable, wenn ich in das Debugging-Problem stoße. Außerdem sollen Tests nicht die Notwendigkeit von Debugging beseitigen? :-)

    Verwandte Themen