In letzter Zeit wurde gefragt, ob es in Java eine gute Idee war, die Ergebnisse des Aufrufs eines Getters einer lokalen Variablen zuzuweisen, um mehrere Aufrufe desselben Accessors zu vermeiden. Ich kann den ursprünglichen Beitrag nicht finden, aber der Konsens scheint zu sein, dass dies im Allgemeinen nicht notwendig ist, da Hotspot sowieso den Methodenaufruf-Overhead optimieren wird.
Wie steht es jedoch mit dieser Technik, um mehrere Würfe zu vermeiden? Im Moment habe ich die Wahl zwischen:
%Vor%ODER
%Vor%Gehen Sie auf jeden Fall mit dem ersten. Der Leistungsunterschied ist wahrscheinlich irrelevant, aber die Lesbarkeit ist definitiv verbessert.
Zusätzlich zum Entfernen der Umwandlungen bedeutet das auch, dass Sie einen anderen Namen verwenden müssen - schließlich wissen Sie jetzt mehr über diese Variable, daher kann es sinnvoll sein, ihr einen spezifischeren Namen zu geben. Das ist nicht immer der Fall, aber es kann sein. Die "lokale Variable einführen, um einen Wert zu nennen" ist eine unterschätzte Refraktortechnik, auch ohne die Umwandlungen ...
Ich bevorzuge es aus Gründen der Lesbarkeit lieber die lokale Variable als die Casting-Funktion zu erstellen. Code Lesbarkeit, für mich (oder andere Entwickler, die an dem gleichen Code arbeiten), ist ein wichtiges Thema.
Die Sorge um die Leistung in diesem Stadium erscheint mir als Beispiel für das Muster der "vorschnellen Optimierung".
Ich bevorzuge das erste, weil es sauberer aussieht. Die zweite sieht wie Lisp
aus. Aber es ist nur eine persönliche Meinung.
Ich würde sagen, das Wichtigste ist, nicht vorzeitig zu optimieren. Wenn beim Gießen ein Overhead entsteht, ist dieser wahrscheinlich so klein, dass er in der Praxis kaum wahrgenommen wird. Wenn dieses Code-Snippet nicht den Großteil der CPU-Zeit Ihrer Anwendung ausmacht, denke ich nicht, dass Sie einen messbaren Leistungsunterschied zwischen den beiden sehen würden.
Folglich würde ich auch für die erste Option gehen, da sie sauberer aussieht und einfacher zu verstehen und zu modifizieren ist - viel wichtiger als ein paar Taktzyklen in 99,99% der Fälle schneller auszuführen.
Ich bevorzuge die erste Option, aus zwei Gründen
Ich stimme Leuten zu, die meinen, dass die erste Version vorzuziehen sei, aber ich würde gerne hinzufügen, dass wenn überhaupt möglich - und das ist fast immer möglich - Sie Casting vermeiden sollten. Nicht aus Performance-Gründen, sondern nur für die zusätzliche Überprüfung der Code-Korrektheit.