Seite 1 von 2
Variablen initialisieren
Verfasst: 18.03.2012 17:58
von Drago
Mal zwischendurch ne blöde Frage ( jedenfalls für die PROFIS )
Variablen einen Anfangswert zuweisen
So :
Code: Alles auswählen
EnableExplicit
Global x.i
Global y.i
Global time.f
Procedure InitVar()
x = 10
y = 20
time = ElapsedMilliseconds()
EndProcedure
; u.s.w
InitVar()
; blabla
oder so :
Code: Alles auswählen
EnableExplicit
Procedure InitVar()
Global x.i = 10
Global y.i = 20
Global time.f = ElapsedMilliseconds()
EndProcedure
; u.s.w
InitVar()
; blabla
Re: Variablen initialisieren
Verfasst: 18.03.2012 18:03
von RSBasic
Kommt drauf an, was du möchtest.
Lokale Definition und Initialisierung:
Globale Definition und Initialisierung (auch in Prozeduren verfügbar):
Oder Definition und Initialisierung nur in einer Prozedur:
Code: Alles auswählen
EnableExplicit
Procedure Test()
Protected abc=1
Debug abc
EndProcedure
Test()
Re: Variablen initialisieren
Verfasst: 18.03.2012 18:08
von Drago
Wenn ich die Variablen auf ihren Ursprungswert zurücksetzen möchte,
declariere ich sie ja beim zeiten Beispiel zum zweiten mal als Global.
Darum geht es mir, ob das ok ist, oder nicht.
Das was du geschrieben hast, weis ich und ist mir auch klar.
Nur bei eben meinem Beispiel bin ich mir unsicher....
Re: Variablen initialisieren
Verfasst: 18.03.2012 18:08
von STARGÅTE
Ich mag die zweite Variante garnicht.
Grund: Sie vermittelt dem lesen der Eindruck, dass die Globalen Variablen nur dann existieren,
wenn InitVar() aufgerufen wurde. Statt desse wird die Globalisierung (nicht das Setzen des Werts) immer "ausgeführt",
wie dieses Beispiel zeigt, obwohl InitVar() nicht aufgerufen wurde.
Code: Alles auswählen
EnableExplicit
Procedure InitVar()
Global Var.i = 10
EndProcedure
Procedure Test()
Debug Var
EndProcedure
;InitVar()
Var = 1
Test()
Da also
Global für eine Variable eh immer ausgeführt wird,
gehört es meiner Meinung nach auch immer außerhalb an den Anfang,
und zwar so weit vorne, wie nötig ist, dass EnableExplicit nicht meckert.
Die Wertsetzung kann dann in einer Prozedur erfolgen.
Ansonsten schließ ich mich RSBasic an.
Re: Variablen initialisieren
Verfasst: 18.03.2012 18:24
von Drago
Hm, Irgendwann und irgendwie muß ich ja die variablen declarieren, also
MUß ein InitVar() ja zumindestens einmal aufgerufen werden.
Außer ich möchte alles wieder auf den Anfangswert setzen.
Und dann ist doch alles so, wie es sein sollte.
Meine Frage ist nur, wenn ich die Variablen eben erneut initialisiere,
also ein zweites mal InitVar() aufrufe, ob es irgendwelche Nachteile
hat, bezüglich der nochmaligen globalisierung..
Re: Variablen initialisieren
Verfasst: 18.03.2012 18:30
von STARGÅTE
Nein, denn wie gesagt, das "Globalisieren" finden vorweg statt.
Das ist dann so, als ob alle Variablen die Global sind, ein Präfix bekommen würden.
Re: Variablen initialisieren
Verfasst: 18.03.2012 18:34
von Drago
Vielen Dank für euere Antworten...
LG Klaus
Re: Variablen initialisieren
Verfasst: 18.03.2012 18:45
von ts-soft
Ich würde für mein ethische Syntaxempfinden dieses empfehlen:
Code: Alles auswählen
EnableExplicit
Global x.i = 10
Global y.i = 20
Global time.f = ElapsedMilliseconds()
Procedure ResetValues()
x = 10
y = 20
time = ElapsedMilliseconds()
EndProcedure
; u.s.w
ResetValues()
; blabla
1. Globale deklaration möglichst Top vom Source und nicht in einer Procedure
2. Die Procedure wird jetzt nur noch zum setzen der Defaultwerte genutzt.
Richtig ist natürlich alles, aber so findet man sich am besten zurecht, wenn man bei der
Deklaration gleich die DefaultWerte sieht, auch wenn diese jetzt doppelt im Source vorkommen,
weil das macht ja mal gar nichts

Re: Variablen initialisieren
Verfasst: 18.03.2012 18:48
von Drago

ethische Syntaxempfinden
Ich schmeiß mich weg.....
Re: Variablen initialisieren
Verfasst: 18.03.2012 18:52
von Nino
STARGÅTE hat geschrieben:Da also Global für eine Variable eh immer ausgeführt wird,
gehört es meiner Meinung nach auch immer außerhalb
... von Prozeduren.
Da kann ich mich nur anschließen. Ich wusste gar nicht, dass es überhaupt erlaubt ist,
Global innerhalb von Prozeduren zu schreiben.
Grüße, Nino