![]() |
Was bringen Konstanten?
sorry, schon wieder so eine dämliche frage, aber ich werde nicht schlau draus was "const" kann und ne variable nicht? (ne konstante kann man zwar im programm nicht ändern, wenn man aber weiss das man einen wert nicht ändern will, brauch man eine Variable ja auch nicht ändern)
Delphi-Quellcode:
const bla = 1;
procedure TForm1.Button1Click(Sender: TObject); var jo: integer; begin jo := bla; end;
Delphi-Quellcode:
var bla: integer = 1;
procedure TForm1.Button1Click(Sender: TObject); var jo: integer; begin jo := bla; end; wo ist da nun der unterschied ? O_o |
Re: Was bringen Konstanten?
Hi,
du weißt das du die Variabale nich ändern willst aber weiß das das Programm auch? Ich meine es ist ja schnell mal passiert das man sagen wie schreibt
Delphi-Quellcode:
oder was und schon is alles hin. Ausserdem sind Konstanten ehr dazu gedacht als hilfen bei z.B. Versions angaben oder so zu dienen. Da schreibt man dann
bla := bla +1
Delphi-Quellcode:
und kann es sooft im Code verwenden wie man will. Ändert sich dann die Version ändert man die Konstante.
const Version = '1';
|
Re: Was bringen Konstanten?
ja, aber würde ich mit einer variablen das gleiche machen würd es genauso funktionieren, bräucht ich sie nur global ändern. und wenn ich weiss das es eine Versions variable ist, dann änder ich sie doch im code nicht mit version := version +1..
|
Re: Was bringen Konstanten?
Hallo silent,
der Unterschied ist auch historisch bedingt: U.a. wurden Konstanten (in Turbo-Pascal jedenfalls) im Codesegment eines Programms geladen, Variablen dagegen im Datensegment. Damit waren Sprünge zu Konstanten als "kurze" Sprünge möglich! Ansonsten hat Luckie recht: Das dient vor allem der Zentralisierung von Variablen. Es ist im Nachhinein ungleich leichter die Versionsnummer an EINER Stelle zu ändern, als alle Stellen des Codes aufzusuchen und zu ändern. Das geht sicher auch mit Variablen, z.B. in einer eigenen Unit, aber die kann man versehentlich überschreiben. Konstanten eben nicht. |
Re: Was bringen Konstanten?
Mach Dich eihmal mit folgenden Konzepten vertraut:
Du bist ein Mensch. Du bist nicht der einzige Programmierer auf der Welt. Nicht die Maschine braucht Compiler, damit sie funktionieren, sondern der Mensch, der sie bedienen will. DAs Ziel einer Entwicklungsumgebung und aller Ihrer Features ist es nicht, Dinge technisch möglich zu machen, sondern sie so effizient und einfach wie möglichh zu machen, und woher um Himmelswillen, soll irgendein Programmierer auf der Welt wissen, ob irgendeine Variable, die du mal eingeführt hast, verändert werden darf oder nicht. Der effizienteste Weg, und der einzige der Fehler ausschließt, anderen Programmieren, dem Compiler (Optimierungen), und auch Dir selbst (nach ein paar Monaten kannst du selbst nicht mehr jede Variable und Konstante die du mal eingeführt hast ohne zu zögern runterbeten), diese Werte als Konstante zu deklarieren. Gruß Woki |
Re: Was bringen Konstanten?
danke @billa...
@woki: Zitat:
danke auch dir |
Re: Was bringen Konstanten?
Sicher können tust du das schon,aber ob es was bringt. Auserdem ist mit der globalen Definition doch nicht ausgeschlossen die Variable zu ändern.
Durch die Deklaration von Konstanten wird es dir und anderen jedenfalls auch leichter den Quelltext zu verstehen...man weiß ahja eine Konstante, also darf/kann ich sie nicht ändern...jedenfalls muss ich sagen, das ich beim Thema programmieren noch in den Kinderschuhen stecke, aber Konstanten find ich persönlich sehr hilfreich!! |
Re: Was bringen Konstanten?
Moin.
Im prinzip hast du Recht, Silent. Ich sehe das genauso. Aber ich kann mir auch vorstellen, wenn die Projekte immer größer werden, dass man ganz froh ist wenn man eine Fehlermeldung bekommt, wenn man versehendlich eine Konstante incrementiert oder sowas... Stell dir mal vor du hast ganz plötzlich einen Fehler und kannst ihn auf etwa 500 Zeilen genau orten? :? Und dann ist das sowas... Ist doch auch ein schönes Hobby... Bis denne... |
Re: Was bringen Konstanten?
hoi,
Zitat:
hatte bis jetzt in meinem prog immer global die versionsnummer als variable, und hat super gefunzt...und da ich weiss das diese die version enthält änder ich sie im quelltext natürlich auch nicht... |
Re: Was bringen Konstanten?
Ja, ok wenn du dich in deinem Quelltext auskennst dann mag das ja alles ok sein, aber wie oben schon gesagt, was ist wenn mal ein anderer den source bearbeitet und versehentlich diese Varibale ändert?
Ich mein es gibt viele Lösungen die zum Ziel führen und jeder muss die für sich richtige finden...nur kann es dann eben sein das es Probleme gibt wenn man den Source jemand anders bearbeiten lässt und dieser eben nicht weiß das diese Variable nicht geändert werden soll. |
Re: Was bringen Konstanten?
Ich beziehe mich auf den Anfang der Frage. Ich glaube Du verwechselst da was Grundsätzliches.
Delphi-Quellcode:
bedeutet, daß du eine Variable mit einem Wert initialisierst. Dieser KANN geändert werden muß es aber nicht. Eine Konstante KANN NICHT geändert werden, es sei denn durch Quelltext und neu compilieren.
var bla: integer = 1;
Also sollte man auch so verfahren, wie es vorgesehen ist. Wo die Konstante/Variable letztenendes im Speicher liegt, ist im Normalfall wohl egal. Das war früher vielleicht mal anders, mit völlig ausreichendem Speicher von 640 KB. :mrgreen: Trotzdem nutze ich Konstanten, falls sich ein Wert nicht ändert. Warum dann eine Variable nutzen ? Alleine schon unter logischen Gesichtspunkten, außerdem ist es sicherer. |
Re: Was bringen Konstanten?
huhu hansa,
Zitat:
warum denn nicht, wenn ich sie nirgends im quelltext mehr ändere? |
Re: Was bringen Konstanten?
Weil keine Variable gebraucht wird, wenn sie nicht variiert wird. :mrgreen: Außerdem dürfte Delphi damit besser zurecht kommen, da nichts zu tun ist. Die Konstante liegt irgendwo im Speicher rum an einem fest definierten Ort und fertig.
|
Re: Was bringen Konstanten?
Zitat:
|
Re: Was bringen Konstanten?
Ja, das hast du doch schon geagt, aber wie auch schon gesagt, woher soll ein anderer Programmierer, der deinen Quelltext kennt den wissen das er diese Variable nicht ändern darf, wenn es sie schon gibt. Du vergibst dafür ne Konstante und wenn er sie ändert hagelt es Fehlermeldungen bzw er erkennt an dem Wort const das er sie nciht ändern soll. Sicher kannst du das auch alles mit Variablen machen, aber wie schnell hat man die mal verändert auch wenn man es nicht will.
UNd mit dem Schlüsselwort const ist eben klar ersichtlich, das es sich hierbei um einen "Ausdruck" handelt, den man nicht ändern darf *Punkt*. :freak: :idea: |
Re: Was bringen Konstanten?
Zitat:
|
Re: Was bringen Konstanten?
Nein sicher nicht. Aber dazu musst du sicher jemand fragen der sich richtig tief im System auskennt! :witch:
|
Re: Was bringen Konstanten?
@Chris: Die Aussage auf die ich mich beziehe habe ich zitiert.
|
Re: Was bringen Konstanten?
Zitat:
2. "woher soll ein anderer Programmierer, der deinen Quelltext kennt den wissen das er diese Variable nicht ändern darf" <<< wenn derjenige nichtmal weiss was die variable/konstante tut(denn sowas weiss man bei ner versionsnummer), dann spielt das doch auch keine rolle was ich da nun nehme oder? @tom: doch habe ich |
Re: Was bringen Konstanten?
@silent:
Mich kannst du nicht bekehren ich trennte und trenne weiterhin streng zwischen Globaler Variable und Constante. Für mich sind nämlich viele Globale Variablen eine schlechte Programmierweise. Ich lösche sogar so einen Mist (wenn ich ihn nicht gerade Brauche)...
Delphi-Quellcode:
Globale Variablen:
var Form2 : TForm2;
Verwirren nur! Und machen das Programm unleserlich. Da man nur selten verfolgenkann wie sie beeinflußt werden bei 200.000 Zeilen Code. Konstanten sind fest und darauf kann ich mich verlassen (außer bei TP7 glaube ich). Bei Mini-Programmen mit 500 Zeilen mag das kein Problem sein. |
Re: Was bringen Konstanten?
Zitat:
Zitat:
Delphi-Quellcode:
weiß jeder Programmierer, dass diese Angabe nirgendwo mehr geändert wird. Nutze ich dagegen eine Variable ist davon auszugehen, dass irgendwo im Quelltext eine Änderung erfolgt. Dieses gibt selbst bei Versionsnummern - Stichwort: Bedingte Compilierung - Sinn.
Const Version = '0.815';
PS: Das Beispiel mit der Versionsnummer ist etwas unglücklich, da man diese über die Projektoptionen einstellt und diese im Source bei der Anzeige auswertet. PPS: Du benutzt auch noch globale Variablen. Pfui! |
Re: Was bringen Konstanten?
hm, jo aber ne version wird doch nicht mitten im source geändert ...aber vom prinzip her wirds mir doch klar was ihr meint :)
Zitat:
Zitat:
Eine Prozedur ändert einen Wert...wie willst du nun mit einer anderen Prozedur darauf zurückgreifen ohne eine globale variable? |
Re: Was bringen Konstanten?
Kaum Nachteile, nur: Delphi hat mehr zu tun, der Compiler braucht 1 mS länger, ein paar Byte mehr Platz wird gebraucht, EXE wird größer usw. Also nichts wichtiges. Das ist nicht ironisch gemeint ! Es ist echt fast egal. Die Fehlerquelle ist aber immer noch vorhanden und das bist Du :!: Stell Dir eine Rechnung vor, wo Du mit Variablen hantierst. Und jetzt willst Du mit
Delphi-Quellcode:
diese auf 16 einstellen. Vorher hast Du an anderer Stelle i auf 33 gesetzt. Dann am besten noch global deklariert. Schon krachts. Deshalb so was erst gar nicht anfangen. Globale Variablen gehören hier auch zum Thema: Vorsicht damit !
MWST := i;
Theorie und Praxis sind aber 2 paar Schuhe. Wenn es ginge würde ich den Mwst.-Satz sofort in eine Konstante packen. Aber es ist nur eine Konstante auf Zeit. Deshalb liegt das ganze in einer Datei. Und dazu brauche ich eine Variable, die den Wert aufnimmt. Eine Versionsnummer, oder die Anzahl Zeilen auf einem Blatt Papier in eine Variable zu packen ist Blödsinn. Und noch was anderes ist noch gar nicht gesagt worden: Wozu gibt es Compiler-Direktiven ? Falls Herr Meier nur Din A 5 Papier benutzt und Herr Schmitt Din A 4 könnte man coden:
Delphi-Quellcode:
So und nun ists gut. Produziere eben notfalls Spaghetti - Code mit Variablen. Bluescreens kommen nicht von ungefähr. :mrgreen:
(*$DEFINE MEIER*)
type PapierTyp = (DINA5,DINA4); (*IFDEF Meier*) CONST p = DINA5; (*$ELSE*) CONST p = DINA4; |
Re: Was bringen Konstanten?
Zitat:
aber danke für die ganzen besispiele, z.b mit herr maier ^^ |
Re: Was bringen Konstanten?
Zitat:
Zitat:
|
Re: Was bringen Konstanten?
Zitat:
Procedure irgendwas; begin s := 'bla'; (s ist global definiert) end; wozu brauch ich da eine function O_o...naja wie gesagt ich komm kaum ohne globale variablen aus, weil ich sie oft von mehreren prozeduren aus brauche |
Re: Was bringen Konstanten?
Zitat:
|
Re: Was bringen Konstanten?
ich bin mit variablen/konstanten definieren kapitel in meinem buch schon 2mal durch, also davon steht da nichts drin :(
|
Re: Was bringen Konstanten?
@silent:
Bei die ist Hopfen und Malz verloren. Schreib du mal richtige Programme! Dann wirst du schon merken warum viele was gegen Globale Variablen haben. Übrigens wenn ich mal eine Globale Variable verwende, dann heißt die nicht "i" oder "s", sondern sie erzählt eine Kurzgeschichte. wie: oPluginList besser wäre sogar goPluginList |
Re: Was bringen Konstanten?
Zitat:
|
Re: Was bringen Konstanten?
@neolithos: schon klar...es war nur ein bsp
@Tom: ich definier nicht jede variable global, es war nur ein bsp dafür das ich dafür keine funktion brauche |
Re: Was bringen Konstanten?
Es ist Dir nicht klar, sonst würdest Du nicht so ein absurdes Beispiel bringen.
|
Re: Was bringen Konstanten?
wie gesagt, siehe oben, habs editiert...
|
Re: Was bringen Konstanten?
Zitat:
|
Re: Was bringen Konstanten?
jo hanse :D
@thema: ich komm mit den antworten (eher den neuen fragen) kaum noch hinterher, lassen wir das mal jetzt also danke mfg |
Re: Was bringen Konstanten?
Zitat:
|
Re: Was bringen Konstanten?
ja, sorry für die frage nach dem SO GROSSEN unterschied :cry:
|
Re: Was bringen Konstanten?
...nun sei mal nicht beldeidigt! Du hast gefragt und Antworten erhalten. Was Du damit anfängst bleibt selbstverständlich Deine Sache. Quintessenz der Diskussion bleibt die Frage nach gutem (lesbarem) Quellcode und QSD-Programm (Quick-Straight-&-Dirty). Dazu ist ebenfalls das meiste gesagt und jetzt ist mal gut...
|
Re: Was bringen Konstanten?
schonmal was von ironie gehört?...ausserdem heisst der smilie nicht das man beleidigt ist sondern traurig...aber wie gesagt (IRONIE)
mfg :P |
Re: Was bringen Konstanten?
...selbstverständlich achte ich Deine Trauer ( :oops: ), also hier mein Beileid zu was auch immer :wink: . Ich google jetzt mal auf der Suche nach der Ironie ... :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 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