Seite 1 von 1

Option Base

Verfasst: 22.08.2009 22:19
von 7x7
Ich vermisse die Möglichkeit zur Angabe einer expliziten Deklaration der Array-Grenzen; z.B:

Code: Alles auswählen

Global DIM Array(200) (Option-)Base -50
Soll in diesem Fall bedeuten: Der Index läuft von -50 bis 150

Verfasst: 22.08.2009 22:41
von STARGÅTE
Was sollte das bringen ?
zu faul +50 im Array zu schreiben ?

Wenn eine Variable z Werte von -50 bis 150 hat dann schreibe ich da
Array(z+50)


PS: Array ist als Array-Name nicht möglich weil Array ein Schlüsselwort ist ;-)

Verfasst: 23.08.2009 11:14
von 7x7
Es geht nicht darum, dass man alles über irgendwelche Krücken programmieren kann, sondern darum, solche Krücken
zu vermeiden. Stichwort "sauberes programmieren". Umwege zur Überbrückung vorhandener Schwächen im System
stehen einer Lösung der eigentlichen Aufgabe nur ärgerlich im Weg herum.

Verfasst: 23.08.2009 11:34
von Little John
7x7 hat geschrieben:Es geht nicht darum, dass man alles über irgendwelche Krücken programmieren kann, sondern darum, solche Krücken
zu vermeiden. Stichwort "sauberes programmieren".
Wirklich sinnvoll wäre eine Möglichkeit beispielsweise etwa

Code: Alles auswählen

Dim Urlaubsreisen(2005:2008)
benutzen zu können, anstatt

Code: Alles auswählen

Dim Urlaubsreisen(3)
und dann immer 2005 vom Index subtrahieren oder dazu addieren zu müssen. Sowas ist ja in anderen BASIC-Dialekten seit Jahrzehnten möglich -- der Offset (in diesem Beispiel 2005) wird dann einfach intern vom Compiler berücksichtigt, was für den Programmierer bequemer ist.
Eine globale Einstellung mit "Option Base" ist allerdings nicht hilfreich, da sie nur zusätzliche Probleme schafft.

Gruß, Little John

Verfasst: 23.08.2009 11:53
von STARGÅTE
Sry kanns mir einfach nicht vergreifen hier Macros ins Spiel zu bringen:

Code: Alles auswählen

Dim _MeinArray(200)

Macro MeinArray(Field)
 _MeinArray(Field+50)
EndMacro

MeinArray(-30) = 123
MeinArray(130) = 456
Debug MeinArray(-30)
Debug MeinArray(130)
Klar, ist mir klar das das keine Lösung ist! Weil sie halt nicht mehr funzt wenn das Array woanders benutzt werden soll.

Aber würde das dann nicht auch dazu führen das Leute ein Array habne wollen das nur die Felder (0,2,4,6) hat, weil es halt für sie künstiger ist als im Array immer (Zahl/2) zu rechnen ?

"sauberes programmieren" heißt doch auch das man es garnicht erst dazu kommen lässt "solche Index Werte" zu erzeugen wenn man ganz genau weiß das es in einem Array anwendung finden soll.

Versteht mich nicht Falsch, klar bin ich auch dafür, weil es halt an einigen Stellen dann 4 zeichen spart, nur bin ich mir unsicher wie weit die "Faulheit" gehen darf.

Mein Forschlag wäre fürs Array dann folgende Definition zu verwenden (abgeguckt vom For To Step):
Dim MeinArray(-10 To 10 Step 5)
Erzeugt dann ein Array mit 5 Feldern (-10,-5,0,5,10)

Verfasst: 23.08.2009 12:02
von ZeHa
Warum benutzt man überhaupt Arrays?? Es reicht doch völlig, den Speicher mit AllocateMemory() zu reservieren und dann mithilfe des Basispointers und SizeOf() auf die einzelnen Speicherbereiche zuzugreifen!

Ihr immer mit euren verweichlichten Anfänger-Lösungen... wahrscheinlich benutzt ihr sogar Print(), obwohl doch jedes Kind weiß, daß man die Zeichen auch direkt in den Ausgabe-Puffer reinpoken kan!