AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Globale Variablen - warum in der DP so verpönt?

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

Ein Thema von new4toms · begonnen am 8. Mai 2005 · letzter Beitrag vom 13. Mai 2005
Antwort Antwort
Seite 1 von 9  1 23     Letzte » 
new4toms
(Gast)

n/a Beiträge
 
#1

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

  Alt 8. Mai 2005, 03:20
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
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

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

  Alt 8. Mai 2005, 04:00
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
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

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

  Alt 8. Mai 2005, 04:14
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. Alternative wären unüberschaubare, fehlerträchtige Programme. Deshalb die Frage nach deiner Programmgröße. Wenn ich an 1000 Stellen im Programm immer dasselbe 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. @dizzy: ich meine damit ein Beispiel zu konstruieren. Sogar ein Beispiel in diesem Zusammenhang ist irreführend, egal wie mans anpackt.
Gruß
Hansa
  Mit Zitat antworten Zitat
new4toms
(Gast)

n/a Beiträge
 
#4

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

  Alt 8. Mai 2005, 05:22
Zitat von Hansa:
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. Alternative wären unüberschaubare, fehlerträchtige Programme. Deshalb die Frage nach deiner Programmgröße. Wenn ich an 1000 Stellen im Programm immer dasselbe 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. @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!?
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

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

  Alt 8. Mai 2005, 06:44
Mal ne Frage @new4toms:

Wieso packst du diese ganzen globalen Variablen nicht einfach in den privaten Abschnitt deiner TForm1(?)-Klasse?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

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

  Alt 8. Mai 2005, 06:53
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.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

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

  Alt 8. Mai 2005, 09:08
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...

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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

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

  Alt 8. Mai 2005, 09:23
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.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

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

  Alt 8. Mai 2005, 15:19
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) : 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

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

  Alt 8. Mai 2005, 15:27
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?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:33 Uhr.
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