AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Code Optimisation: Benutzung von const in prozedur-Köpfen
Thema durchsuchen
Ansicht
Themen-Optionen

Code Optimisation: Benutzung von const in prozedur-Köpfen

Ein Thema von SneakyBagels · begonnen am 8. Jun 2017 · letzter Beitrag vom 3. Aug 2018
Antwort Antwort
Seite 1 von 2  1 2      
SneakyBagels
(Gast)

n/a Beiträge
 
#1

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen

  Alt 8. Jun 2017, 11:19
Delphi-Quellcode:
var FString: String = 'Test';

procedure Change(const AString: String);
begin
  FString := 'Blubb';
  ShowMessage(AString);
end;

procedure CallMe;
begin
  Change(FString);
  Change(FString);
end;
Da frage ich mich.... wer baut so einen Unsinn?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen

  Alt 8. Jun 2017, 11:26
Delphi-Quellcode:
var FString: String = 'Test';

procedure Change(const AString: String);
begin
  FString := 'Blubb';
  ShowMessage(AString);
end;

procedure CallMe;
begin
  Change(FString);
  Change(FString);
end;
Da frage ich mich.... wer baut so einen Unsinn?
Jo... Wenn ich einen Referenz als Const übergebe und dann ne "GLOBALE" Variable intern ändere, muss ich mich nicht wundern...
Wie macht das den C? Den Zugriff auf die Globale Variable verhindern, weil das zufällig die gleiche Referenz ist?
Fehlermeldung beim compilieren? Oder etwa zur Laufzeit?

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen

  Alt 8. Jun 2017, 12:43
Im Bezug auf Strings hatte ich vor kurzem schonmal auf eine ähnliche Frage geantwortet:
http://www.delphipraxis.net/1359775-post23.html

Wie macht das den C? Den Zugriff auf die Globale Variable verhindern, weil das zufällig die gleiche Referenz ist?
Nee, vor solchen Sachen schützt C einen auch nicht. Könnte ja auch gewollt sein, selbst wenn es wenig Sinn ergibt.

Ich denke Const ist nicht nur für die Performance, sondern auch (für mich) so einen Art Flag...

Signalisiert mir Procedure Foo(Const AValue : Integer) ändert nix an dem was ich Übergebe...
Nö, für den Aufrufer ändert sich doch nichts. Wenn die Methode kein const hätte erhält sie lokal auf dem Stack eine Kopie des Parameters, aber was kümmert das den Aufrufer?
Ich glaube Mavarik geht es um den Aspekt des "self documenting code". Natürlich ändert sich die Variable auch ohne const nicht nach dem Funktionsaufruf, aber z.b. Objektparameter deklariere ich auch gerne mit const , um zu signalisieren, dass ich das Objekt nicht verändere (auch wenn das aufgrund der fehlenden const correctness von Delphi natürlich funktionieren würde).
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen

  Alt 8. Jun 2017, 12:56
Ok ich wollte nur darauf hinaus dass ein const für den Aufrufer genauso viel aussagt wie kein const .

Aus Performance-Gründen haben wir das const drin wo geht, es als Doku für Arme zu nutzen dass man verspricht das übergebene Objekt nicht zu manipulieren wäre natürlich auch eine Möglichkeit. Leider ist es dafür zu spät. Wäre vielleicht wirklich eine gute Idee gewesen. Naja, für's nächste Projekt...
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen

  Alt 8. Jun 2017, 11:39
Da frage ich mich.... wer baut so einen Unsinn?
Das war eigentlich nur ein Test, einen ähnlichen Code hatte ich irgendwo im Bezug auf diese Delphi-const-Geschichte gefunden. Dass der Code so Käse ist, ist mir schon klar. Seltsam ist nur das Ergebnis, da wird nämlich beim zweiten Aufruf ein Leerstring ausgegeben.
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#6

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen

  Alt 8. Jun 2017, 11:41
Zitat:
Wie macht das den C? (...) Fehlermeldung beim compilieren?
Eine Fehlermeldung beim Kompilieren wäre in zukünftigen Versionen von Delphi vielleicht nicht schlecht.

Zitat:
Das war eigentlich nur ein Test
Das weiß ich, keine Sorge

Ich handhabe es immer so, dass ich nur Variablen/Typen etc übergebe bei denen ich ganz genau weiß, dass ich diese in der Prozedur / Funktion nur lese und nicht schreibe.
Dann sollte eigentlich nichts schiefgehen.
Auch nutze ich das nur bei String und Typen. Zahlenwerte und Booleans ignoriere ich.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen

  Alt 8. Jun 2017, 11:49
Ich denke Const ist nicht nur für die Performance, sondern auch (für mich) so einen Art Flag...

Signalisiert mir Procedure Foo(Const AValue : Integer) ändert nix an dem was ich Übergebe...
Genauso wie OUT klar kann man Var nehmen aber das verhalten wird eindeutiger...
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#8

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen

  Alt 8. Jun 2017, 11:52
Genauso wie OUT klar kann man Var nehmen aber das verhalten wird eindeutiger...
Der Name var hat mich eh schon immer gestört. Außerdem ist er total irreführend.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#9

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen

  Alt 8. Jun 2017, 13:02
Der Name var hat mich eh schon immer gestört. Außerdem ist er total irreführend.
Inwiefern? Gut, man hätte es auch als InOut bezeichnen können, aber ob das immer alle auf Anhieb kapieren?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Code Optimisation: Benutzung von const in prozedur-Köpfen

  Alt 8. Jun 2017, 13:17
Der Name var hat mich eh schon immer gestört. Außerdem ist er total irreführend.
Inwiefern? Gut, man hätte es auch als InOut bezeichnen können, aber ob das immer alle auf Anhieb kapieren?
Ich hab das implizit immer als "der Parameter ist variabel" interpretiert. Also scheint mir das halbwegs logisch, zumindest nicht "total irreführend".
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 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