![]() |
Konstantenparameter
Hi!
Sollte man in selbst deklarierten Methoden Konstantenparameter den anderen Parametern vorziehen? Denn in der Delphi-Hilfe steht: Zitat:
Deswegen wundert mich, dass an anderer Stelle in der Hilfe steht: Zitat:
|
Re: Konstantenparameter
Grundsätzlich: Jein.
Wenn du Records oder Strings übergibst, die du nicht ändern willst, deklarier sie als const. Wenn du sie ändern musst, und die aufrufende Methode soll's mitkriegen, nimm var. Ansonsten: du hast wahrscheinlich was falsch gemacht und solltest dein Design überdenken :zwinker: Für einfache Dinge wie Integer oder Byte machts weniger Sinn, auch wenn du Konstanten als Parameter übergeben willst, sehe von var/const ab. Wenn du allerdings viele Floats rumschiebst, kann es unter Umständen einen gewissen Geschwindigkeitsvorteil mit sich bringen - muss aber nicht. |
Re: Konstantenparameter
Bei Parametern vom Typ String, die in der Methode nicht verändert wrden, ja. Zum einem, wegen der Optimierung und zum andrem erhöht es die Lesbarkeit, weil man sofort sieht, dass der Paramater nicht verändert wird.
|
Re: Konstantenparameter
Ich würde mal sagen, dass ein const nie schadet, oder? Also selbst wenn es überflüssig sein sollte, dürfte dies doch nichts verschlechtern.
Unabhängig davon hier auch gleich eine Frage zum gleichen Thema, weiß jmd. ob es nicht eh aut. eine Optimierung durch den Compiler gibt? Ich meine mich zu erinnern, dass z.B. der Java-Compiler einzelne Parameter eh als final übersetzt, wenn diese in einer Methode nicht geschrieben werden. Vielleicht hat ja der Delphi-Compiler hier eine ähnliche Optimierung, so dass auch das Fehlen keine Auswirkungen hat (sehen wir von der Lesbarkeit ab). Zu dem Thema Lesbarkeit, dann sollte man doch auch noch out erwähnen, ist auch nochmal eindeutig und sinnvoll! Gruß Der Unwissende |
Re: Konstantenparameter
Zitat:
|
Re: Konstantenparameter
Zitat:
const bringt immer eine Geschwindigkeitsoptimierung wenn der eigentliche Parameter mehr als 4 Byte (für Win32) benötigt. Dann wird statt einer kopie deines Parameters (String, Struktur, ...) nur eine Zeiger übergeben. Bei Objekten bringts nichts da ja sowieso nur eine Referenz übergeben wird und diese ist ja ein 4 Byte Zeiger. |
AW: Re: Konstantenparameter
Das Thema interessierte mich so sehr, daß ich mich damit beschäftigte und hier trotz des Alters der Diskussion etwas dazu beitragen möchte:
Zitat:
Wenn man also die übergebene (in die Routine "hineinfließende") Variable nicht verändert, ist es demnach egal, ob man sie einfach oder mit const gegen Veränderung abgesichert übergibt. Diese Beobachtung machte ich bereits mit Delphi 2.0 (und 3.0). |
AW: Re: Konstantenparameter
Zitat:
PS: Es gab vor Kurzem schonmal einen Thread dazu wo wild hin- und herdiskutiert und auch mal was gemessen wurde. |
AW: Konstantenparameter
Das hat einfach was mit der Referenzzählun zu tun. Es ist wie das Kopieren eines Strings. Beim Kopieren wird keine Zeit verloren, da eigentlich keine Kopie erstellt wird, sondern nur der Referenzzähler um eins erhöht wird, was ja recht fix geht.
Wenn man dann aber die Kopie (oder auch das Original) ändert startet Delphi den eigentlichen Kopiervorgang. Und erst jetzt wird es teuer. Du beschreibst quasi das normal zu erwartende Verhalten, da brauch man auch keine Zeitmessungen etc für. |
AW: Konstantenparameter
@Delphi-Laie:
Es wird schon bei einer einfachen Zuweisung an eine andere Variable der Referenzzähler erhöht, während das bei einem const Parameter nicht passiert. Das kannst du im Assemblerquelltext sofort sehen. Deshalb werden zumindest einige CPU-Zyklen mehr gebraucht. Mit welchem Quelltext hast du denn getestet? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz