Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Globale Variablen (https://www.delphipraxis.net/24738-globale-variablen.html)

gmarts 25. Jun 2004 12:07


Globale Variablen
 
Hallo,
ich lese hier immer wieder, dass es "gefährlich" ist mit globalen Variablen zu arbeiten.
Wenn ich einen Wert(string) global benötige, ist es besser eine globale Variable zu vereinbaren oder einfach ein unsichtbares Label zu nehmen, wo ich den String reinschreibe?

toms 25. Jun 2004 12:09

Re: Globale Variablen
 
Zitat:

oder einfach ein unsichtbares Label zu nehmen, wo ich den String reinschreibe?
Dann lieber eine globale Variable.

Nicolai1234 25. Jun 2004 12:10

Re: Globale Variablen
 
wobei du nochmal genau überprüfen solltest, ob der string wirklich global sein muss!
Meistens reicht eine function!

gmarts 25. Jun 2004 12:11

Re: Globale Variablen
 
@toms: Hast du auch eine gute Begründung? :)

@nicolai: Ja muss global sein.

Nicolai1234 25. Jun 2004 12:13

Re: Globale Variablen
 
Meinst du eine Begründung dafür, dass man kein Label nehmen sollte? Diese Begründung liegt doch auf der HAnd! Es ist einfach unsaubere Progrmmierung, wenn man über ein unsichtbares Label strings weiter gibt, schließlich sind dafür ja die Variablen da! Sonst hätte man die ja grnicht erst "erfinden" müssen!

Tubos 25. Jun 2004 12:14

Re: Globale Variablen
 
Ein unsichtbares Label ist wahrscheinlich die grauenhafteste Lösung, die es gibt :wink:

gmarts 25. Jun 2004 12:15

Re: Globale Variablen
 
Zitat:

Zitat von Nicolai1605
Meinst du eine Begründung dafür, dass man kein Label nehmen sollte? Diese Begründung liegt doch auf der HAnd! Es ist einfach unsaubere Progrmmierung, wenn man über ein unsichtbares Label strings weiter gibt, schließlich sind dafür ja die Variablen da! Sonst hätte man die ja grnicht erst "erfinden" müssen!

:-D Stimmt, da hast du acuh wieder recht. Doch globale Variablen werden oft auch als "unsauberer Programmierstil" bezeichnet.

Es gibt ja auch als dritten Weg noch die tag-Eigenschaft, allerdings nur für Integer Werte. Wäre die dann nicht auch "unsauber"?

Nicolai1234 25. Jun 2004 12:16

Re: Globale Variablen
 
Ich sag ja guck dir nochmal an, wofür du ihn brauchst, oft reicht wie gesagt eine function!

toms 25. Jun 2004 12:18

Re: Globale Variablen
 
Zitat:

Doch globale Variablen werden oft auch als "unsauberer Programmierstil" bezeichnet.
Na ja, wenn es nur eine ist, dann ist es nicht so schlimm.
Könntest die Variable aber auch in die Form-Klasse reintun.
Beschreibe aber mal genauer, für was du die Variable brauchst.

gmarts 25. Jun 2004 12:20

Re: Globale Variablen
 
Zitat:

Zitat von Nicolai1605
Ich sag ja guck dir nochmal an, wofür du ihn brauchst, oft reicht wie gesagt eine function!

Ich habe eine Videoplayerkomponente, deren Abspielstatus(Play,Pause,Stop) ständig wechselt bzw. auch gewechselt wird. Dieser Status wird von mir über eine Funktion ermittelt. Da ich aber nicht ständig die Funktion aufrufen will und den Status neu ermitteln will, würde ich selbigen gern global verweigen.

Nikolas 25. Jun 2004 12:21

Re: Globale Variablen
 
Warum soll den eine globale Variable schlechter Programmierstil sein? :roll: Wenn ich Daten auf zwei Forms oder auch nur in unterschiedlichen Buttons o.ä. brauche, ist das doch der einfachste Weg. Wo liegt denn das Problem? :gruebel:

Tox

neolithos 25. Jun 2004 12:23

Re: Globale Variablen
 
Zitat:

Zitat von Toxman
Warum soll den eine globale Variable schlechter Programmierstil sein? :roll: Wenn ich Daten auf zwei Forms oder auch nur in unterschiedlichen Buttons o.ä. brauche, ist das doch der einfachste Weg. Wo liegt denn das Problem? :gruebel:

Tox

Das Thema wurde schon ausgiebig Disskutiert :roll:
Aber eins erkenne ich an dieser Aussage! Das du noch kein sehr großes Programm geschrieben hast (ich kann mich auch irren)!

Nicolai1234 25. Jun 2004 12:24

Re: Globale Variablen
 
Aber du musst doch eh die function aufrufen um zu sehen, wie der momentane Status ist!
Wie wird dieser denn dann weiter verwendet?

neolithos 25. Jun 2004 12:26

Re: Globale Variablen
 
Zitat:

Zitat von Toxman
Warum soll den eine globale Variable schlechter Programmierstil sein? :roll: Wenn ich Daten auf zwei Forms oder auch nur in unterschiedlichen Buttons o.ä. brauche, ist das doch der einfachste Weg. Wo liegt denn das Problem? :gruebel:

Tox

Nochmal dazu!

Das hatte ich jetzt erst an der Hochschule! Vermeidung von Globalen Variablen hat etwas mit Information Hidding zu tun! Ein Konzept eines "modern" geschriebenen Programmes!

gmarts 25. Jun 2004 12:27

Re: Globale Variablen
 
Zitat:

Zitat von Nicolai1605
Aber du musst doch eh die function aufrufen um zu sehen, wie der momentane Status ist!
Wie wird dieser denn dann weiter verwendet?

Beispiel: Ich drücke eine Taste "FragNachStatus", dann wird die Funktion, die den Status ermittelt aufgerufen. 10 Sekunden oder einen Tatsendrück oder wie auch immer später soll dieser Status irgendwo angezeigt werden. Dann frage ich doch lieber eine Variable ab, als die komplette Funktion nochmal aufzurufen, oder? Ist doch performancetechnisch besser.

Edit: Sprich, dieser ermittelte Status wird im Programm an anderen Stellen weiterverarbeitet.

Nicolai1234 25. Jun 2004 12:30

Re: Globale Variablen
 
Du kannst die finction doch auch erst aufrufen, wenn das ergebnis auch tatsächlich angezeigt wird, oder?

gmarts 25. Jun 2004 12:33

Re: Globale Variablen
 
Zitat:

Zitat von Nicolai1605
Du kannst die finction doch auch erst aufrufen, wenn das ergebnis auch tatsächlich angezeigt wird, oder?

Ja, aber dieses Ergebnis wird auch an späterer/anderer Stelle im Programm benutzt. So oft will ich diese Funktion aus Performancegründen nicht aufrufen. Leider hat die Playerkomponente keine Property State, wie z.B. TMediaplayer. :?

neolithos 25. Jun 2004 12:33

Re: Globale Variablen
 
Zitat:

Zitat von gmarts
Beispiel: Ich drücke eine Taste "FragNachStatus", dann wird die Funktion, die den Status ermittelt aufgerufen. 10 Sekunden oder einen Tatsendrück oder wie auch immer später soll dieser Status irgendwo angezeigt werden. Dann frage ich doch lieber eine Variable ab, als die komplette Funktion nochmal aufzurufen, oder? Ist doch performancetechnisch besser.

Ich würde für solche Probleme eine Art Private Variable empfehlen.

Delphi-Quellcode:
unit ...
interface

  procedure FragNachStatus;
  function GetStatus : Integer;

implementation

var iState : Integer = 0;

procedure FragNachStatus;
...

function GetStatus : Integer;
begin
  Result := iState;
end;

end.
Sinn:
-Klare Schnittstelle die gewisse Änderungen zuläst
-Die Variable ist Schreib geschützt
-Man kann sich sicher sein das nur die Funktionen darauf zugreifen
-Später Änderungen lassen sich besser überblicken

gmarts 25. Jun 2004 12:37

Re: Globale Variablen
 
[Durchgestrichen]@neolithos: Das leuchtet mir schon ein. Doch ich will meinen Ergebniswert nicht immer wieder neu mit einer Funktion abfragen, das geht doch auf die Leistung.[/Durchgestrichen]

Edit: Oh sorry. Habe nicht genau gelesen. :oops: Das ist eine gute Idee.

Aber iState ist doch auch eine globale Variable?

Luckie 25. Jun 2004 12:44

Re: Globale Variablen
 
Entweder als Paramneter übergeben oder wenn das auch zu umständlich ist, zu mindest als Feld der Form-Klasse. Die gefahr bei globalen Variablen liegt darin, dass man echt Probleme bekommt, wenn sie nicht den erwarteten Wert enthält, dann geht nämlich die Sucherei los, wo dieser Wert geändert wird.

neolithos 25. Jun 2004 12:44

Re: Globale Variablen
 
Ja aber der Vorteil an dieser Globalen Variable ist, dass sie nur innerhalb dieser Unit sichtbar ist.

Keine andere Unit hat auf sie Zugriff.

Dies ist in bei mir keine Globale Variable.

gmarts 25. Jun 2004 12:50

Re: Globale Variablen
 
@neolithos
Da habe ich damals in der Schule etwas anderes gelernt. :)

@luckie
Wenn man nach Luckie geht, dann sind globale Variablen rein "Virtual" .


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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