Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Was bringen Konstanten? (https://www.delphipraxis.net/8968-bringen-konstanten.html)

Pseudemys Nelsoni 16. Sep 2003 05:08


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

BungeeBug 16. Sep 2003 05:58

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:
bla := bla +1
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

Delphi-Quellcode:
const Version = '1';
und kann es sooft im Code verwenden wie man will. Ändert sich dann die Version ändert man die Konstante.

Pseudemys Nelsoni 16. Sep 2003 06:01

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..

Billa 16. Sep 2003 06:29

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.

woki 16. Sep 2003 06:38

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

Pseudemys Nelsoni 16. Sep 2003 06:58

Re: Was bringen Konstanten?
 
danke @billa...

@woki:
Zitat:

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.
ich seh sie doch wenn sie global definiert ist, nur seh ich das immernoch so, das ich für alles genauso ne variable statt ne konstante nehmen kann..

danke auch dir

chris_82 16. Sep 2003 07:04

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!!

Tonic1024 16. Sep 2003 07:09

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...

Pseudemys Nelsoni 16. Sep 2003 07:11

Re: Was bringen Konstanten?
 
hoi,

Zitat:

Sicher können tust du das schon,aber ob es was bringt.
was heisst ob mir das was bringt, ich sehe zwischen variable und konstante kein unterschied, ausser das man letztere nicht überschreiben kann...

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...

chris_82 16. Sep 2003 07:21

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.

Hansa 16. Sep 2003 07:21

Re: Was bringen Konstanten?
 
Ich beziehe mich auf den Anfang der Frage. Ich glaube Du verwechselst da was Grundsätzliches.
Delphi-Quellcode:
var bla: integer = 1;
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.

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.

Pseudemys Nelsoni 16. Sep 2003 07:24

Re: Was bringen Konstanten?
 
huhu hansa,

Zitat:

Warum dann eine Variable nutzen ?

warum denn nicht, wenn ich sie nirgends im quelltext mehr ändere?

Hansa 16. Sep 2003 07:33

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.

Pseudemys Nelsoni 16. Sep 2003 07:35

Re: Was bringen Konstanten?
 
Zitat:

Weil keine Variable gebraucht wird, wenn sie nicht variiert wird.
aber hätte keine nachteile eine zu verwenden oder ? :love:

chris_82 16. Sep 2003 07:40

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:

Tom 16. Sep 2003 07:41

Re: Was bringen Konstanten?
 
Zitat:

Zitat von silent
aber hätte keine nachteile eine zu verwenden oder ?

Die Nachteile wurden in diesem Thread schon erwähnt. Ich glaube nicht wirklich, dass Du alle Beiträge gelesen und den Inhalt nachvollzogen hast.

chris_82 16. Sep 2003 07:41

Re: Was bringen Konstanten?
 
Nein sicher nicht. Aber dazu musst du sicher jemand fragen der sich richtig tief im System auskennt! :witch:

Tom 16. Sep 2003 07:45

Re: Was bringen Konstanten?
 
@Chris: Die Aussage auf die ich mich beziehe habe ich zitiert.

Pseudemys Nelsoni 16. Sep 2003 07:46

Re: Was bringen Konstanten?
 
Zitat:

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
1. (wenn es um eine versionsnummer geht) hat kein anderer das an meinem programm zu ändern
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

neolithos 16. Sep 2003 07:53

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:
var Form2 : TForm2;
Globale Variablen:
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.

Tom 16. Sep 2003 07:54

Re: Was bringen Konstanten?
 
Zitat:

Zitat von silent
1. (wenn es um eine versionsnummer geht) hat kein anderer das an meinem programm zu ändern

Mit 19 steht man noch nicht unbedingt im Berufsleben und arbeitet isoliert vor sich hin. Falls Du mal mit programmieren Geld verdienen möchtest: Du wirst Quelltexte anderer fortführen müssen und andere werden Deine Quelltext fortführen. Ist so.

Zitat:

wenn derjenige nichtmal weiss was die variable/konstante tut
Es geht darum anderen (und auch Dir selber) das Leben leicht zu machen. Sieht man oben im Quelltext
Delphi-Quellcode:
Const Version = '0.815';
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.

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!

Pseudemys Nelsoni 16. Sep 2003 08:00

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:

Mit 19 steht man noch nicht unbedingt im Berufsleben und arbeitet isoliert vor sich hin. Falls Du mal mit programmieren Geld verdienen möchtest: Du wirst Quelltexte anderer fortführen müssen und andere werden Deine Quelltext fortführen. Ist so.
soweit werd ich sowieso nie kommen ;)


Zitat:

PPS: Du benutzt auch noch globale Variablen. Pfui!
jo, sag mir mal folgendes...

Eine Prozedur ändert einen Wert...wie willst du nun mit einer anderen Prozedur darauf zurückgreifen ohne eine globale variable?

Hansa 16. Sep 2003 08:00

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:
MWST := i;
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 !

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:
(*$DEFINE MEIER*)

type PapierTyp = (DINA5,DINA4);

(*IFDEF Meier*)
  CONST
    p = DINA5;
(*$ELSE*)
  CONST
    p = DINA4;
So und nun ists gut. Produziere eben notfalls Spaghetti - Code mit Variablen. Bluescreens kommen nicht von ungefähr. :mrgreen:

Pseudemys Nelsoni 16. Sep 2003 08:04

Re: Was bringen Konstanten?
 
Zitat:

MWST := i;
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.
ich werd die variable kaum auf 33 irgendwo setzen wenn MWST sowieso 16 ist -_-


aber danke für die ganzen besispiele, z.b mit herr maier ^^

Tom 16. Sep 2003 08:04

Re: Was bringen Konstanten?
 
Zitat:

Zitat von silent
Eine Prozedur ändert einen Wert...

Das wäre dann eine Funktion mit Rückgabewert ..., statt eine globale Variable zu ändern.

Zitat:

wie willst du nun mit einer anderen Prozedur darauf zurückgreifen ohne eine globale variable?
Diese Konstrukte sollte man mit Übergabeparametern vermeiden. Ansonsten ist in der OOP alles an Klassen, Methoden und Eigenschaften etc. orientiert. Zum Stichwort Property gibt es z.B. eine Menge Lesenwertes in der OH.

Pseudemys Nelsoni 16. Sep 2003 08:08

Re: Was bringen Konstanten?
 
Zitat:

Das wäre dann eine Funktion ...

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

Hansa 16. Sep 2003 08:08

Re: Was bringen Konstanten?
 
Zitat:

Zitat von silent
Zitat:

PPS: Du benutzt auch noch globale Variablen. Pfui!
jo, sag mir mal folgendes...

Eine Prozedur ändert einen Wert...wie willst du nun mit einer anderen Prozedur darauf zurückgreifen ohne eine globale variable?

Haste schon mal was von Wert/Const/Var-Parametern gehört, Kapselung, von Funktionen, Rückgabewert, Sichtbarkeit usw. ? Da besteht ofensichtlich erhöhter Nachholbedarf. Globale Variable nur im Notfall benutzen, wenns wirklich nicht anders geht zum Bsp. eben mit Konstanten.

Pseudemys Nelsoni 16. Sep 2003 08:11

Re: Was bringen Konstanten?
 
ich bin mit variablen/konstanten definieren kapitel in meinem buch schon 2mal durch, also davon steht da nichts drin :(

neolithos 16. Sep 2003 08:12

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

Tom 16. Sep 2003 08:13

Re: Was bringen Konstanten?
 
Zitat:

Zitat von silent
Procedure irgendwas;
begin
s := 'bla'; (s ist global definiert)
end;

Wenn Du wirklich in dieser Art un Weise Deine Quelltext aufbaust: Beschäftige Dich mit den Grundlagen der OOP. Diese hier in diesem Thread zu erläutern, dürfte den Rahmen etwas sprengen.

Pseudemys Nelsoni 16. Sep 2003 08:13

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

Tom 16. Sep 2003 08:15

Re: Was bringen Konstanten?
 
Es ist Dir nicht klar, sonst würdest Du nicht so ein absurdes Beispiel bringen.

Pseudemys Nelsoni 16. Sep 2003 08:16

Re: Was bringen Konstanten?
 
wie gesagt, siehe oben, habs editiert...

Hansa 16. Sep 2003 08:16

Re: Was bringen Konstanten?
 
Zitat:

Zitat von silent
Ich werd die variable kaum auf 33 irgendwo setzen wenn MWST sowieso 16 ist -_-

Nehm ich Dir nicht ab. Und ob Du das machst. Keiner wird das verhindern können. :mrgreen:

Pseudemys Nelsoni 16. Sep 2003 08:18

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

Hansa 16. Sep 2003 08:20

Re: Was bringen Konstanten?
 
Zitat:

Zitat von silent
...ich komm mit den antworten (eher den neuen fragen) kaum noch hinterher, lassen wir das mal jetzt

Geschieht Dir Recht. Biste selber Schuld. :lol:

Pseudemys Nelsoni 16. Sep 2003 08:21

Re: Was bringen Konstanten?
 
ja, sorry für die frage nach dem SO GROSSEN unterschied :cry:

Billa 16. Sep 2003 09:45

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...

Pseudemys Nelsoni 16. Sep 2003 09:47

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

Billa 16. Sep 2003 09:52

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.
Seite 1 von 2  1 2      

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