Option Base

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Option Base

Beitrag 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
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 ;-)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Beitrag 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.
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Little John

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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!
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Antworten