Seite 1 von 3

For/Next vs. Strukturierte Variablen ?!

Verfasst: 04.01.2009 16:39
von Burstnibbler
Hallo miteinander,

Ich bin jetzt dazu übergegangen, sämtliche Variablen in Strukturen zu packen (und schon gibt´s das erste Problem :o ).

Wenn ich nämlich folgenden Code ausführe:

Code: Alles auswählen

Structure Stuff
 OLoop.l
 ILoop.l
EndStructure

Global Misc.Stuff

For Misc\OLoop=0 to 100
 Blablub()
Next
kommt die Fehlermeldung: "For/Next only accepts non-structured variables as counters"

Und jetzt frage ich mich natürlich: "Warum ist das so ?"
Gibt es eine logische Erklärung für diese Einschränkung ... und wenn ja, wie kann man Sie umgehen ?

Hoffe das mir jemand weiterhelfen kann/will/möchte.

Pure Greetz,
Burstnibbler

Verfasst: 04.01.2009 16:55
von THEEX
Es werden halt nur Variablen ohne Stuktur bei For:Next - Schleifen akzeptiert. Wenn Dein OLoop füllen möchtest, wobei dabei wohl der Sinn Deiner Struktur verloren geht, machs so:

Code: Alles auswählen

Structure Stuff
 OLoop.l
 ILoop.l
EndStructure

Global Misc.Stuff

For x = 0 To 100
  Misc\OLoop = x
  ;Blablub()
Next 

Verfasst: 04.01.2009 17:00
von Kaeru Gaman
> Ich bin jetzt dazu übergegangen, sämtliche Variablen in Strukturen zu packen

öh... warum und wozu? :?

Strukturen haben sinnvolle Einsatzgebiete, aber sie ohne Sinn und Grund einfach überall einzusetzen ist extrem kontraduktiv.



betreffs schleifen:

For-Schleifen arbeiten nur mit Longs zuverlässig, bzw. vielleicht jetzt mit Integer, bin ich mir nicht sicher.
ebenso akzeptieren sie nur Konstanten als Steps.
Hintergrund ist die Optimierung auf performance.

wenn man mehr features haben will, muss man eben While oder Repeat verwenden.

Verfasst: 04.01.2009 17:23
von Burstnibbler
@THEEX
Hmmmja, genau das ist das Problem: ich will eben alle globalen Variablen strukturiert haben und nicht "kreuz und quer" im ganzen Code verteilt (mal abgesehen von Protected- und Static Variablen).

@Kaeru Gaman
Warum?
Naja, eigentlich nur der Übersichtlichkeit wegen. Damit sortiere ich alle Variablen nach dem Einsatzgebiet, was ich persönlich sehr viel angenehmer empfinde.
aber sie ohne Sinn und Grund einfach überall einzusetzen ist extrem kontraduktiv.
Wieso extrem, welche Nachteile könnten dadurch entstehen ? :?
(Gut möglich, dass ich den Sinn von Strukturen/die Arbeitsweise auch falsch verstehe). Aber genau darum habe ich den Thread ja erstellt: Weil mir irgendwie nicht einleuchtet, warum es mit :
OLoop=0 to 100 ; funktioniert, und mit
Misc\OLoop=0 to 100 ; nicht funktionieren soll.

Verfasst: 04.01.2009 17:34
von Josef Sniatecki
Also der Einsatz von Variablen in Strukturen in For-Schleifen ist
völlig unnötig. Eigentlich gibt man nur einen Variablennamen in der
For-Schleife an, um wenigstens den aktuellen Index in der Schleife zu
erhalten. Es ist also wirklich völlig unnötig eine Variable aus einer
Struktur einzusetzen, da die Variable nach "For" nur sowas ähnliches
wie eine kurze Hilfsvariable ist.

Außerdem: Nach der For-Schleife benötigt man den Wert der benutzen
Variable doch nicht mehr für irgendwas, oder? Also braucht man dafür
keine Struktur, die dann extra ein Feld für For-Schleifen freihält.

@Burstnibbler: Wenn es eine Angewohnheit von dir ist, dann würde ich
diese abschalten. Definiere die Variablen am besten immer nach dem
"Gruppe_Variable"-Schema. Da ist immer noch besser, als eine Struktur.

Benutze also Strukturen nur, wenn du Daten wirklich für Funktionen
oder wichtigeres Gruppieren musst. Es ist 1. Professioneller und 2.
besser für For-Schleifen. :wink:

Gruß Josef

Verfasst: 04.01.2009 17:41
von Kaeru Gaman
Burstnibbler hat geschrieben:ich will eben alle globalen Variablen strukturiert haben und nicht "kreuz und quer" im ganzen Code verteilt (mal abgesehen von Protected- und Static Variablen).
von Global hast du oben nichts gesagt...

es ist sowieso nicht sinnvoll, zu viele Globale Variablen zu verwenden.
Im Grunde nur die Variablen Global machen, die es wirklich, wirklich, wirklich sein müssen.


Variablen die im Hauptcode vorkommen, kannst du ganz zu Anfang definieren,
das solltest du sowieso machen, mit EnableExplicit, dessen Verwendung sich grundsätzlich empfieht,
musst du sowieso alle Variablen definieren, also kannst du das auch am Anfang des Hauptcodes machen.

Verfasst: 04.01.2009 17:43
von gnasen
Ich nutze diese Art der Strukturierung allerdings auch sehr gerne. Wenn man alle globalen Variablen in die Structure Globals\ einfügt, erhöht das meiner Meinung nach enorm die Lesbarkeit des Codes.

Verfasst: 04.01.2009 17:48
von Kaeru Gaman
sorry, ich versteh das nicht.

wie sieht denn deine Struktur dann aus?


und was spricht dagegen, alle Globalen Variablen mit einem Prefix zu versehen?

Code: Alles auswählen

Global.l Global_MouseX
Global.l Global_MouseY
Global.l Global_MouseWheel
Global.l Global_MouseLeftButton
Global.l Global_MouseRightButton
Global.l Global_MouseMiddleButton

Verfasst: 04.01.2009 17:56
von Josef Sniatecki
Kaeru Gaman hat geschrieben:

Code: Alles auswählen

Global.l Global_MouseX
Global.l Global_MouseY
Global.l Global_MouseWheel
Global.l Global_MouseLeftButton
Global.l Global_MouseRightButton
Global.l Global_MouseMiddleButton
Genau meine Art. Strukturen werden eigentlich dazu verwendet, um
Daten für Zugriffe/Argumente zu Gruppieren und zur Definition
wiederzuverwenden. Was bringt mir ne Struktur, wenn ich sie nur
einmal nutze?

Der Code da oben macht das gleiche zur Übersichtlichkeit. Der einzige
Unterschied ist, dass man später ein "_" und kein "" setzt.

Verfasst: 04.01.2009 18:22
von cxAlex
Ich neige jetzt auch eher dazu Globale Variablen in ne Struktur zu packen.
Find ich einfach schöner, sonst aus keinem Grund.