Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   globale Variablen? (https://www.delphipraxis.net/107364-globale-variablen.html)

Aurelius 29. Jan 2008 18:40

Re: globale Variablen?
 
Wenn er damit mein
Delphi-Quellcode:
if Form2.Checkbox1.checked then ...
fände ich das etwas übertrieben^^

Khabarakh 30. Jan 2008 19:31

Re: globale Variablen?
 
Zitat:

Zitat von xX0815Xx
Wenn er damit mein
Delphi-Quellcode:
if Form2.Checkbox1.checked then ...
fände ich das etwas übertrieben^^

Meine ich. Wenn man auf der einen Seite Anfängern von globalen Variablen abrät, gleichzeitig aber die automatisch angelegten Variablen wie "Form1" benutzt, dann grenzt das für mich an Scheinheiligkeit.

Hansa 30. Jan 2008 19:45

Re: globale Variablen?
 
Wird Form1.XXX von anderer Form/Unit aufgerufen, dann deutet dies auf schlechten Stil hin. Nicht mehr und nicht weniger. Die Units aind dann womöglich zu schlecht durchdacht. Globale Variablen werden dadurch schlecht, dass man sie während der Programmlaufzeit verändert, mehrfach neu deklariert eventuell sogar innerhalb einer Prozedur usw. Sind sie nur einmal vorhanden und werden sie nur gelesen, so dass man sie nicht laufend neu lesen muss, dann ist das soweit in Ordnung.

mkinzler 30. Jan 2008 19:47

Re: globale Variablen?
 
Zitat:

Wird Form1.XXX von anderer Form/Unit aufgerufen, dann deutet dies auf schlechten Stil hin.
Noch schlimmer ist es aber, wenn innerhalb einer klasse auf diese "Standard"-Instanz zugegriffen wird.

Hansa 30. Jan 2008 19:57

Re: globale Variablen?
 
Was ist eine Standard-Instanz ? :shock: Solche Fragen über global usw. sind ja durchaus berechtigt. Das Thema hat sich durch OOP völlig gewandelt. Früher hatte man entweder innerhalb einer Prozedur eine Variable oder eben "global". Jetzt gibt es auch globale, die zur Verfügung stehen, sofern die betreffende Unit nur in USES drinsteht, also wie vorher auch. Zusätzlich gibt es aber jetzt Form-Globale, die für die Form gelten und die kann man mit Konstrukten wie Form1.XXX := 123 komplett aushebeln. Hinzu kommt dann noch sowas wie private, protected usw. Dann gibts Variable mit gleichen Namen, die sich je nachdem nicht mal ins Gehege kommen ! Trivial kann man das IMHO nicht mehr nennen.

mkinzler 30. Jan 2008 20:00

Re: globale Variablen?
 
Damit meine ich das Formx, welches vom Formulardesigner automatisch angelegt wird. Wie oft sieht man imn Methoden den Zugriff auf diese Instant anstatt auf die aktuelle (Self).

Khabarakh 30. Jan 2008 20:09

Re: globale Variablen?
 
Zitat:

Zitat von Hansa
Sind sie nur einmal vorhanden und werden sie nur gelesen, so dass man sie nicht laufend neu lesen muss, dann ist das soweit in Ordnung.

Aber genau das ist eben nicht die mehrheitlich vertretene Meinung hier im Forum, wie sich am ersten Posting erkennen lässt:
Zitat:

Alles was ich gefunden habe, war immer wieder der Hinweis, man solle erst gar keine globalen Variablen verwenden.
Und trotz dieser Absage wird weiterhin fröhlich "Form1" getippt, darauf wollte ich hinweisen.
Was nicht heißt, dass ich selbst dir zustimme ;) . Globale Variablen lassen sich _immer_ ohne wirklichen Mehraufwand durch eine objektorientiertere Form ersetzen[*]. Dass sie bei Forms in jedem Fall auf schlechtes Design hinweisen, hast du ja schon erwähnt.
[*] Um wieviel aussagekräftiger und sicherer ist (um bei deinem Beispiel zu bleiben) z.B. eine öffentliche, read-only Klasseneigenschaft als eine globale Variable mit dem darübergesetzten Kommentar "bitte nur lesen, NICHT SCHREIBEN!"? Und Schmankerl wie Lazy Loading gibt's kostenlos dazu.

Hansa 30. Jan 2008 20:20

Re: globale Variablen?
 
Bin mal ein Programm durchgegangen. Es gibt tatsächlich eine Form, die im Stile von FormX.XXX auf Variablen einer anderen zugreift. Wie gesagt : ist schlechter Stil. Aber warum nehme ich das trotzdem in kauf ? Die eine Form hat ca. 10.000 Zeilen. Die zweite dient zum Suchen und braucht sowieso extra Form. Das ist wirklich ein Sonderfall. Die Suchform ist zu groß, um das mit Panelen usw. realisieren zu können. Jetzt muss ich den von der SuchForm gefundenen Datensatz an die Quasi-Hauptform (zumindest in diesem Programmteil) weiterreichen. Nur wie ? Das Ergebnis wird eben einfach weitergereicht. Diese Suchform ist allerdings auch abgeleitet und wird nicht nur einmal verwendet. Somit kann ich sie nicht einfach in die Form, die nur spezielle Sachen braucht integrieren.

wg. roter Kasten : nur-Lese-Eigenschaften als properties einzubauen ist am sichersten. Aber warum ? Nur weil ein Fehler direkt auftaucht. Das ist jetzt echt Zufall, aber ich habe fast den ganzen Tag damit zugebracht, um festzustellen, dass es sich nicht lohnt eine Programm-global gesetzte Property einzubauen. Zum Selbstzweck darf sowas nicht werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr.
Seite 3 von 3     123   

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