AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Globale Variablen, typisierte Konstanten

Ein Thema von Alienhere · begonnen am 5. Okt 2004 · letzter Beitrag vom 6. Okt 2004
Antwort Antwort
Alienhere
(Gast)

n/a Beiträge
 
#1

Globale Variablen, typisierte Konstanten

  Alt 5. Okt 2004, 19:13
Bin zwar alt, aber neu hier im Forum und per Modem unterwegs

Gelegentlich habe ich hier Abfälliges zu globalen Variablen und typisierten Konstanten gelesen

Was spricht dagegen? Falls es dazu bereits Threads geben sollte, antwortet doch bitte mit einem Link darauf!

Vielen Dank!

mfg
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Globale Variablen, typisierte Konstanten

  Alt 5. Okt 2004, 20:33
Moin,

globale Variablen sind böse weil...

Das Programm wird unübersichtlich (wo kommt die Variable her, wo wird sie geändert, ...)

Wenn man mit Klassen arbeitet und mehrere Instanzen einer Klasse anlegt und diese dann auf eine globale Variable zugreifen, dann passiert nur noch müll.

Auch wenn man mal eben was ausprobieren will, sollte man gleich ordentlich programmieren und das bedeutet so wenig wie möglich mit globalen Variablen arbeiten. Eigentlich benötigt man gar keine globalen Variablen, man kann alles auch ohne lösen.

typisierte Konstanten sind nicht von vorteil, weil man ihnen Werte zuweisen kann. Das sind dann keine Konstanten mehr. Sie sind nur von vorteil, wenn man sie als formale Paramter in Methoden benutzt, weil dann die Geschwindigkeit der Methodenaufrufe erhöht werden kann.

MfG
Thorsten
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Globale Variablen, typisierte Konstanten

  Alt 5. Okt 2004, 20:54
Zitat von omata:
typisierte Konstanten sind nicht von vorteil, weil man ihnen Werte zuweisen kann. Das sind dann keine Konstanten mehr. Sie sind nur von vorteil, wenn man sie als formale Paramter in Methoden benutzt, weil dann die Geschwindigkeit der Methodenaufrufe erhöht werden kann.
Da muss ich dir widersprechen, wenn man nämlich typisierte Konstanten nicht als Konstanten, sondern als Variablen ansieht, kann man statische Variablen, wie man sie aus den C-ähnlichen Sprachen kennt, nachbilden:

Delphi-Quellcode:
procedure DoSomething;
const
  Counter: Integer = 0;
begin
  //irgendwas machen

  Inc(Counter);
end;
Counter ist hier im Scope der Prozedur gültig, der Wert bleibt aber über die Laufzeit der Prozedur hinaus erhalten.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Globale Variablen, typisierte Konstanten

  Alt 5. Okt 2004, 21:03
Moin,

ok das sehe ich ein.
Es gibt durchaus sinnvolle Einsatzgebiete für typisierte Konstanten.
Die Möglichkeit der Initialisierung im Deklarationsteil ist sehr sinnvoll.

Ich denke ich war zusehr mit dem verteufeln von globalen Variablen beschäftigt, dass ich da einen Runt-Umschlag gemacht habe.

Danke für deinen Hinweis .


MfG
Thorsten
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.262 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Globale Variablen, typisierte Konstanten

  Alt 5. Okt 2004, 21:04
Moin Chewie,

Zitat von Chewie:
Counter ist hier im Scope der Prozedur gültig, der Wert bleibt aber über die Laufzeit der Prozedur hinaus erhalten.
man könnte diesen Satz dann aber z.B. wie folgt ergänzen:

, was dann zur Folge hat, dass die Prozedur keinen definierten Zustand hat, wenn man sie aufruft.
(es kann zumindest unübersichtlich werden den Anfangszustand zu kennen)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Hansa

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

Re: Globale Variablen, typisierte Konstanten

  Alt 5. Okt 2004, 22:11
Ich würde mich mal zu allererst an folgende Richtlininien halten:

1. Konstanten nur für konstante Werte benutzen und nicht versuchen hieraus dann doch über Umwege eine Variable zu machen und sie zu verändern.

2. Variable nicht für Konstanten zu benutzen, die sich normalerwiese nie ändern.

3. Gültigkeitsbereiche so gering wie nöglich zu halten.

In der Praxis sieht es aber dann etwas gemischter aus. Warum soll man keinerlei globalen Variablen / Konstanten benutzen ? Die Mwst. bspw. ist bei mir global, denn ich habe keine Lust in zig Prozeduren, diese als Parameter mitzuschleppen. Das gibt mehr Durcheinander, als es wert ist.

Schleifenvariablen, oder soche, die wirklich nur kurz gebraucht werden niemals global definieren. Man stelle sich einmal ein i vor, das überall lokal als integer definiert ist, aber an einer Stelle ist keine lokale Definition vorhanden und das Programm greift von alleine auf ein global definiertes i zu !! Dann krachts aber mit Sicherheit irgendwann.
Gruß
Hansa
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Globale Variablen, typisierte Konstanten

  Alt 6. Okt 2004, 13:53
Zitat von Christian Seehase:
man könnte diesen Satz dann aber z.B. wie folgt ergänzen:

, was dann zur Folge hat, dass die Prozedur keinen definierten Zustand hat, wenn man sie aufruft.
(es kann zumindest unübersichtlich werden den Anfangszustand zu kennen)
Einen definierten Zustand hat sie schon, nur erkennt man ihn von außerhalb nicht
Aber das ist nichts anderes wie eine private Variable einer Klasse: Wenn der Wert der Variablen nur die Prozedur selbst was angeht, dann muss dieser Wert nicht von außen übergeben werden. Sinn macht es z.B. beim Protokollieren in eine Textdatei, in der man mit einem Zähler z.B. die Zeilennummer reinschreiben kann.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#8

Re: Globale Variablen, typisierte Konstanten

  Alt 6. Okt 2004, 15:58
Zuweisbare typisierte Konstanten
Zitat von Chewie:
Zitat von Christian Seehase:
man könnte diesen Satz dann aber z.B. wie folgt ergänzen:

, was dann zur Folge hat, dass die Prozedur keinen definierten Zustand hat, wenn man sie aufruft.
(es kann zumindest unübersichtlich werden den Anfangszustand zu kennen)
Einen definierten Zustand hat sie schon, nur erkennt man ihn von außerhalb nicht
Wenn der Wert der Variablen nur die Prozedur selbst was angeht, dann muss dieser Wert nicht von außen übergeben werden. Sinn macht es z.B. beim Protokollieren in eine Textdatei, in der man mit einem Zähler z.B. die Zeilennummer reinschreiben kann.
Sinn machen sie also dann, wenn nur die prozedur selbst, aber nicht der Aufrufer den Wert kennen muß oder kann, und der Wert aufgrund vorheriger, instanzübergreifender Aufrufe bestimmt werden muß. Der Aufrufer kann den Wert gar nicht übegeben, weil er ihn gar nicht kennt. Sinnvolle Verwendung findet dies z.B. bei der Implementation einer Singleton - Klasse. Es gibt also Dinge, für die typisierte Konstanten die elganteste, oder gar einzig sinnvolle Möglichkeit der Implementation in Object-Pascal darstellen. Ungeschickt ist nur die Deklaration (das Ding solte eigentlich nicht const heißen), nicht was das Ding tut.

Globale Variable
Variable sind Dinge, die vom Programm geändert werden. Hier verstößt die Verwendung Globaler Variablen gegen das Kapselungsprinzip, macht das Programm unübersichlicher. Verpacken in eine Singletonklasse und Zugriff über Getter und Setter erhöht die Übersichtlichkiet des Programms und verringert die Gefahr falscher Zugriffe auf die Variable.
Die Formvarable (Form1 :TForm) sind globale Variable, man schaue sich einfach mal an, was passeiert, wenn von einer Form, die sich ein zugehöriges Datenmodul erzeugt, mehrere Instanzen exisistieren, und dann wundern.

Globale Konstanten
Hier will ich nicht unbedingt etwas gegen sagen, außer daß Verpacken in eine Singeltonklasse es eventuell leichter machen könnten, später mal Dinge daran transparent für den Rest des Programmes zu ändern. Z.B. wenn bei es bei Internationalisierung plötzlich nicht mehr einen Mehrwertsteuersatz gibt, und man das Programm einfach auf andere Sprachen (und damit Mehrwertsteuersätze) umschalten können will.

Grüsse
Woki
  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 07:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf