Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bei der Deklaration einer Variable einen Wert definieren (https://www.delphipraxis.net/118439-bei-der-deklaration-einer-variable-einen-wert-definieren.html)

mirage228 8. Aug 2008 12:45

Re: Bei der Deklaration einer Variable einen Wert definieren
 
Zitat:

Zitat von alex517
Zitat:

Zitat von Apollonius
Das ist dann aber keine lokale Variable mehr.

sondern?

Das ist eine Konstante, die du mittels Compiler-Switch zum Beschreiben zweckentfremdest :-P :mrgreen:

SubData 8. Aug 2008 13:38

Re: Bei der Deklaration einer Variable einen Wert definieren
 
Zitat:

Zitat von alex517
Ich nutze das z.B. um sicherzustellen, dass eine Procedure/Funktion nicht rekursiv aufgerufen wird.

alex

Edit: War Käse...

sirius 8. Aug 2008 13:39

Re: Bei der Deklaration einer Variable einen Wert definieren
 
Zitat:

Zitat von alex517
Zitat:

Zitat von Apollonius
Das ist dann aber keine lokale Variable mehr.

sondern?

In C gibt es so etwas (ähnliches) und nennt sich statische Variable.

alex517 8. Aug 2008 14:38

Re: Bei der Deklaration einer Variable einen Wert definieren
 
oh man, hätte ich bloß nichts gesagt..

Zitat:

Zitat von alex517
Zitat:

Zitat von Apollonius
Das ist dann aber keine lokale Variable mehr.

sondern?

Mein "sondern" bezog sich auf Apollonius Aussage das dieses "Gebilde" nicht lokal sein soll.
Das es per Definition eine veränderbare Konstante ist, darauf habe ich ja selbst hingewiesen.

Zitat:

Zitat von himitsu
Dann doch lieber globale Variablen (innerhalb des Implementation-Blocks haben sie auch keine Auswirkungen außerhalb der Unit)
Und mit passenden Variablennamen kommt man auch sonst mit nichts in Konflikte.

Da finde ich meine Variante sinnvoller, die Variable(Konstante) wird genau dort definiert wo sie
hingehört und verwendet wird.

Zitat:

Zitat von Luckie
So etwas zu nutzen halte ich übrigens für schlechten Stil.

Warum? Wenn ich Konstanten in dieser Form definiere,
Delphi-Quellcode:
const
  cfgFarbe: TColor = clRed;
dann mache ich das genau aus dem Grund, diese später ändern zu können.


Zitat:

Zitat von himitsu
So wären außerdem alle Konstantan davon betroffen,
was einige Nachteile mit sich bringen kann

Welche Nachteile?
"Richtige" Konstanten
Delphi-Quellcode:
  cFehlerColor = clRed;
können nicht verändert werden.

alex

Edit: Mit so vielen Leuten auf einmal habe ich mich ja noch nie angelegt.
Fehlt mir nur noch Hagens Standpauke. ;)

Apollonius 8. Aug 2008 15:46

Re: Bei der Deklaration einer Variable einen Wert definieren
 
Deine zuweisbaren typisierten Konstanten behalten ihren Wert, nachdem die Routine verlassen wurde. Außerdem gibt es nette Effekte, falls die Routine sich irgendwann einmal selbst aufruft, da dann beide die gleiche "Variable" verändern.

alex517 8. Aug 2008 15:57

Re: Bei der Deklaration einer Variable einen Wert definieren
 
Zitat:

Zitat von Apollonius
Deine zuweisbaren typisierten Konstanten behalten ihren Wert, nachdem die Routine verlassen wurde. ..

Genau das nutze ich aus, damit dieses
Zitat:

Zitat von Apollonius
Außerdem gibt es nette Effekte, falls die Routine sich irgendwann einmal selbst aufruft, ..

nicht passiert.

Mein Beispiel zeigt ja genau die Verhinderung des rekursiven Aufrufs.

alex

Apollonius 8. Aug 2008 16:03

Re: Bei der Deklaration einer Variable einen Wert definieren
 
Ja. Ich wollte nur feststellen, dass diese statischen Variablen, wie sie in C heißen, eine ganz andere Funktion als lokale Variablen erfüllen. Damit sind sie für den Threadersteller keine Lösung.

himitsu 8. Aug 2008 18:55

Re: Bei der Deklaration einer Variable einen Wert definieren
 
Konstanten sind aber Konstanten und keine veränderlichen Variablen.
außerdem ist des {$J+} / {$WRITEABLECONST ON} mehr zur Abwärtskompatibilität vorhanden.

Obwohl ich zwar auch gern mal einige "Fehler" ausnutze ... irgendwo muß man doch nicht gleich alles machen, nur weil es geht?


Vorallem da durch eine unbedachte Verwendung dieser Compilerschalter sich schnell mal die Adressen auf die "Konstanten"-Inhalte ändern.


Zitat:

Zitat von alex517
die Variable(Konstante) wird genau dort definiert wo sie
hingehört und verwendet wird.

mach ich genauso, da ich sowas schließlich direkt vor der Funktion definiere :angel2:

gammatester 8. Aug 2008 22:36

Re: Bei der Deklaration einer Variable einen Wert definieren
 
Zitat:

Zitat von himitsu
Konstanten sind aber Konstanten und keine veränderlichen Variablen.

Genau! Und deshalb sind typed constants auch keine Konstanten! Auch sind veränderliche Variablen ein Pleonasmus bzw. wären unveränderliche Variablen ziemlich sinnlos.

Zitat:

Zitat von himitsu
Vorallem da durch eine unbedachte Verwendung dieser Compilerschalter sich schnell mal die Adressen auf die "Konstanten"-Inhalte ändern.

Völlig unverständlich!? Wieso sollten sich die Adressen ändern, und wenn, was wäre daran so verwerflich? Wenn Du ein paar neue Variable definierst, ändern sich doch auch eventuell Adressen von schon vorhandenen?

Zitat:

Zitat von himitsu
mach ich genauso, da ich sowas schließlich direkt vor der Funktion definiere :angel2:

Leider sind diese Konstrukte dann allerdings nicht mehr lokal!

Das alles wäre halbwegs akzeptabel, wenn die Delphi-Weiterentwickler nicht in ihrer unendlichen Weisheit beschlossen hätten, daß innerhalb von Prozeduren/Funktionen etc.
Delphi-Quellcode:
var myvar: mytype = myvalue;
fehlerhaft ist, während
Delphi-Quellcode:
const myvar: mytype = myvalue;
erlaubt ist.

Gruß Gammatester

Apollonius 8. Aug 2008 22:40

Re: Bei der Deklaration einer Variable einen Wert definieren
 
Dass dieses Konstrukt bei lokalen Variablen und Felder nicht funktioniert, finde ich absolut richtig. Bei globalen Variablen und Konstanten wird der Startwert einfach in einem Abschnitt des PE-Formats angegeben. Bei lokalen Variablen geht das nicht, man muss erst die Variable auf dem Stack allozieren und dann noch einen Wert hineinschreiben, was auf das selbe wie die explizite Zuweisung hinausläuft. Die Initialisierungs-Syntax würde dies verwischen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:17 Uhr.
Seite 2 von 3     12 3      

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 by Thomas Breitkreuz