Delphi-PRAXiS
Seite 1 von 9  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Globale Variablen - warum in der DP so verpönt? (https://www.delphipraxis.net/45538-globale-variablen-warum-der-dp-so-verpoent.html)

new4toms 8. Mai 2005 02:20


Globale Variablen - warum in der DP so verpönt?
 
Die einschlägigen Beiträge habe ich schon gelesen!!!

Globale Variablen machen m.M.n. *nur* dann Ärger, wenn man sie zur "Zwischenspeicherung" von irgendwelchen Informationen benutzt und man seinen *eigenen* Sourcecode dann nicht mehr erkennt.

Bislang hatte ich noch nie Probleme, meinen eigenen Sourcecode wiederzuerkennen.

Womit haben denn die "Globalen-Variablen-Feinde" Probleme?

Mal wirklich ganz naiv gefragt?

Echt neugierig,
new4toms

dizzy 8. Mai 2005 03:00

Re: Globale Variablen - warum in der DP so verpönt?
 
Aus meiner Sicht sprechen 2 Dinge gegen globale Variablen:

1) Sie sind im Konzept der OOP nicht existent, und wäre dort (wenn in Reinform praktiziert) auch schlicht unbrauchbar.

2) Sie müllen einem das Projekt voll, und zwar mit ihrem Namen. Wenn ich in Unit1 eine glob. Variable "x" habe, und Unit1 in die uses-Liste von Unit2 aufnehme, so ist "x" dort ebenso gültig. Die Folge ist, dass man z.B. in einer Funktion lokal "x" deklariert, und so lange man sich in dieser Funktion befindet, wird das lokale "x" genommen. Verwende ich das "x" aber an anderer Stelle und halte es aus Versehen für das eben genannte lokale "x", so wird mir der Compiler keinen Error ausspucken, sondern munter mit dem globalen "x" aus Unit1 kompilieren, und somit einen Fehler in der Logik herbeiführen, der dann u.U. nur schwer nachvollziehbar ist. Diese Problematik steigt und fällt natürlich mit der Komplexität eines Projektes, aber allein die Tatsache dass es eine selbst gebaute Fehlerquelle sein kann, disqualifiziert die globalen Variablen im Sinne einer sauberen Programmierung (imho).

Ich muss jedoch zugeben, dass ich bei quick'n'dirty Mini-Mal-Eben-Programmen auch hier und da was global deklariere. Vornehmlich dann, wenn ich nur eine Unit brauche - z.B. um schnell was zu testen. Ansonsten vermeide ich sie wo es geht.

Gruss,
Fabian

Hansa 8. Mai 2005 03:14

Re: Globale Variablen - warum in der DP so verpönt?
 
Zitat:

Zitat von new4toms
...Bislang hatte ich noch nie Probleme, meinen eigenen Sourcecode wiederzuerkennen.

Womit haben denn die "Globalen-Variablen-Feinde" Probleme?

Da du ja angeblich bereits alles darüber gelesen hast, müßte dir einiges klar sein, warum das keiner machen sollte. Einzeln zähle ich das deshalb jetzt nicht neu auf. Mehrere Gegenfragen : womit hast denn du Probleme, wenn du glaubst sie benutzen zu müssen ? Wie groß ist denn dein Programm überhaupt ? Meinst du, nur aus Spaß wäre private, public usw. eingeführt worden ?

Globale Variablen kommen aus den 50er Jahren des letzten Jahrhunderts (Basic & Co). Da ging es wohl nicht anders. Dann kamen Unterprogramme mit eigenen Variablen. Dann noch das Unit Konzept mit diesen beiden Sorten an Variablen und zusätzlich noch Implementation/Interface-Unterscheidung (auch schon 20 Jahre her). Und jetzt muß man sich sogar noch mit protected, published usw. rumplagen. Warum ist das so ? Weil es nicht anders geht. :mrgreen: Alternative wären unüberschaubare, fehlerträchtige Programme. Deshalb die Frage nach deiner Programmgröße. Wenn ich an 1000 Stellen im Programm immer dasselbe
Delphi-Quellcode:
var i : integer;
benutze und verändere, dann sage mir mal an welcher dieser 1000 Stellen das i irrtümlich falsch besetzt wird. Du wirst ewig brauchen, das zu finden, falls dies überhaupt gelingt.

Guck dir mal in dem Zusammenhang noch GOTO an. Im Zusammenspiel mit globalen Variablen ist das dann echt nicht schlecht. 8)

EDIT : Der letzte Satz ist natürlich ein Witz. Verwende bloß kein GOTO. Und dizzys Beitrag paßt auch gut zum Thema. Schön zu sehen, was bei dabei rauskommt: man kann es nicht mal vernünftig erklären. Ich habe zwar den Sinn verstanden, aber nur weil ich sowieso gewußt habe was er meint. :lol: @dizzy: ich meine damit ein Beispiel zu konstruieren. Sogar ein Beispiel in diesem Zusammenhang ist irreführend, egal wie mans anpackt.

new4toms 8. Mai 2005 04:22

Re: Globale Variablen - warum in der DP so verpönt?
 
Zitat:

Zitat von Hansa
Zitat:

Zitat von new4toms
...Bislang hatte ich noch nie Probleme, meinen eigenen Sourcecode wiederzuerkennen.

Womit haben denn die "Globalen-Variablen-Feinde" Probleme?

Da du ja angeblich bereits alles darüber gelesen hast, müßte dir einiges klar sein, warum das keiner machen sollte. Einzeln zähle ich das deshalb jetzt nicht neu auf. Mehrere Gegenfragen : womit hast denn du Probleme, wenn du glaubst sie benutzen zu müssen ? Wie groß ist denn dein Programm überhaupt ? Meinst du, nur aus Spaß wäre private, public usw. eingeführt worden ?

Globale Variablen kommen aus den 50er Jahren des letzten Jahrhunderts (Basic & Co). Da ging es wohl nicht anders. Dann kamen Unterprogramme mit eigenen Variablen. Dann noch das Unit Konzept mit diesen beiden Sorten an Variablen und zusätzlich noch Implementation/Interface-Unterscheidung (auch schon 20 Jahre her). Und jetzt muß man sich sogar noch mit protected, published usw. rumplagen. Warum ist das so ? Weil es nicht anders geht. :mrgreen: Alternative wären unüberschaubare, fehlerträchtige Programme. Deshalb die Frage nach deiner Programmgröße. Wenn ich an 1000 Stellen im Programm immer dasselbe
Delphi-Quellcode:
var i : integer;
benutze und verändere, dann sage mir mal an welcher dieser 1000 Stellen das i irrtümlich falsch besetzt wird. Du wirst ewig brauchen, das zu finden, falls dies überhaupt gelingt.

Guck dir mal in dem Zusammenhang noch GOTO an. Im Zusammenspiel mit globalen Variablen ist das dann echt nicht schlecht. 8)

EDIT : Der letzte Satz ist natürlich ein Witz. Verwende bloß kein GOTO. Und dizzys Beitrag paßt auch gut zum Thema. Schön zu sehen, was bei dabei rauskommt: man kann es nicht mal vernünftig erklären. Ich habe zwar den Sinn verstanden, aber nur weil ich sowieso gewußt habe was er meint. :lol: @dizzy: ich meine damit ein Beispiel zu konstruieren. Sogar ein Beispiel in diesem Zusammenhang ist irreführend, egal wie mans anpackt.

@Hansa: Das Projekt ist/sind ca. 200.000 Zeilen, die ich "verschärft" betreue. Ca. 15.000 Programmzeilen davon wurden von mir im Lauf der letzten sechs Jahre modifiziert (mit globalen Variablen und sogar GOTOs). Mit allen benutzten Komponenten sinds sogar über 1.4 MIO Zeilen, die ich für das Projekt (D5pro) betreue/überwache! Da ich dabei selbstverständlich ein Schweinegeld verdiene, darfst Du mal an dem Bentley lutschen, den ich Hartz IVer gerade poliere :-)

Edit:
i: Integer (local);
gi: Integer (global_integer);
gi2: Integer (global_integer_#2);
b: Boolean (local);
gb: Boolean (global_boolean);
gb2: Boolean (global_boolean_#2);

Natürlich bin ich mir *absolut* sicher, daß man die obige Reihe keinesfalls fortsetzen kann, da sie keinerlei Systematik erkennen lässt!!!

Man sieht sich wieder bei HartzIV!?

Pseudemys Nelsoni 8. Mai 2005 05:44

Re: Globale Variablen - warum in der DP so verpönt?
 
Mal ne Frage @new4toms:

Wieso packst du diese ganzen globalen Variablen nicht einfach in den privaten Abschnitt deiner TForm1(?)-Klasse?

Robert Marquardt 8. Mai 2005 05:53

Re: Globale Variablen - warum in der DP so verpönt?
 
Globale Variablen, die nicht fuer die ganze Lebenszeit der Unit gebraucht werden, machen unnoetige Probleme.
Das groesste Problem ist, das man die Variable zugreifen kann, obwohl sie eigentlcih ungueltig ist.
Sprich man gibt die Fehlermeldung auf, die man sonst bekommen koennte.

Was man sihc mit globalen Hilfsvariablen auch einfangen kann sind Probleme mit der Nebenlaeufigkeit.
Eine Hilfsvariable kann durchaus von mehreren Instanzen einer Komponente zugegriffen werden und schwupps aendert die eine die
Variable waehrend die andere auf die Werte vertraut.

Bei der JVCL z. B. habe ich alle globalen Variablen (und als Variablen missbrauchte Konstanten) entfernt, die nicht
wirklich global sind. Zusaetzlich wurden alle globalen Variablen (meist Listen) in der finalization nicht nur
freigegeben sondern auch auf nil gesetzt. Das hat eine Menge merkwuerdiger Fehler beseitigt.

alzaimar 8. Mai 2005 08:08

Re: Globale Variablen - warum in der DP so verpönt?
 
Ich finde die Diskussion hier insofern etwas lustig, als das Delphi selbst globale Variablen kreiert.

Es geht natürlich Ohne.
Es geht auch ohne Goto-Befehle.
Es geht auch alles nur mit OOP.

Das ist aber genauso hirnrissig und engstirnig, als zu behaupten, alles ginge mit ASM.

Manchmal sind globale Variablen praktischer, weil sie eben Global sind. Wozu soll ich sie in eine Klasse schmeissen? Wenn ich aber recht drüber nachdenke, ist das reine Faulheit... :oops:

Goto: Es gibt wirklich Anwendungsfälle, bei denen ein Goto einfach eleganter, weil schneller, ist. Allerdings nimmt die Anzahl der Argumente seit 'break' und 'continue' rapide ab. Aber mal im Ernst, sind die beiden Befehle nicht einfach nur GOTO's aber im hübscheren Gewand?

OOP: Das ist schon eine feine Sache, aber für kleine Geschichten einfach überdimensioniert. Ich brech mir bei einem 100 Zeilen Teil doch nicht Einen ab und erzeuge erst eine Klasse...

----
Ich denke, es wird klar, woraum ich hinaus will: Man sollte seine Werkzeuge sorgfältig aussuchen und genau den Bedürfnissen entsprechend einsetzen:

Wenn's die Performance verlangt, hüpfe ich in meinen Code mit GOTO's (ordendlich dokumentiert) durch die Gegend.

OOP setze ich natürlich weitestgehend ein, aber auch nicht für jeden Furz.

jfheins 8. Mai 2005 08:23

Re: Globale Variablen - warum in der DP so verpönt?
 
Ich finde, man sollte nicht alles gleich verurteilen.

Man kann GoTo's und globale variablen durchaus sinvoll verwenden,
wenn ein GoTo sinvoller und einfacher zu verstehen als eine Schleife ist, warum nicht verwenden ?

Man kann auch globale Variablen sinnvoll einsetzen, nur kann man den gleichen Effekt meist mit einer Klassenvariable erzielen, wobei hier eben die OOP-Lösung vorzuziehen ist.

Hansa 8. Mai 2005 14:19

Re: Globale Variablen - warum in der DP so verpönt?
 
Ich habe nicht gesagt, man dürfe keine globalen Variablen benutzen. Es geht darum, sie weitestgehend zu vermeiden. Manchmal geht es eben nicht anders. Bsp.: Variable wird im ganzen Programm gebraucht. Diese kommt aber aus einer INI. Man kann also leider nicht mal eine Konstante verwenden.

Dann noch zu den GOTOs (wenn man hier einmal ein falsches Wort benutzt, schon kommen die Geier) :mrgreen: : das war nichts anderes als ein Zugeständnis in den 70ern an die Basic-Umsteiger. Wer die benutzt, obwohl er sie gar nicht benötigt, der ist entweder grenzenlos faul oder kann schlicht und einfach nicht programmieren, weil damit Delphi so ziemlich vollständig ausgehebelt werden kann.

alzaimar 8. Mai 2005 14:27

Re: Globale Variablen - warum in der DP so verpönt?
 
Zu den GOTOen (um mal noch eine Veranglizistisierungsverklausulierung vorzunehmen):
Lasst uns das folgende Gesetz im Bundestag einbringen:
Zitat:

Wer GOTOen benutzt oder erwähnt oder benutzte oder erwähnte GOTOen in Umlauf bringt wird präventiv geteert und gefedert. Wenn er sich anschliessend traut, sein GOTO zu begründen, sei ihm verziehen. Wenn nicht, kriegt er gleicht noch eins drauf.
Einverstanden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 Uhr.
Seite 1 von 9  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz