Feature request > IDE/Syntax

Constant-Enumeration

(1/3) > >>

UserWithoutGLBasic:
English:

I'm new to GLBasic and still trying out with the free version, had already a couple of basic languages and now I want to port one of my older progs to GLBasic for some training-purposes. Now I'm used to replace all unreadable numeral through plain, readable text, that's why I like to use a lot of "Constants". Guess what follows:
It would be great if one could enumerate those somehow as described in the code below 
(where StartConstants + EndConstants are just imaginary statements, could be done using GlobalConstants and LocalConstants to get it in perfection)

Deutsch:

Ich bin ganz neu bei GLBasic und "übe" noch mit der kostenlosen Version, habe aber bereits mit vielen anderen Basic-Dialekten herumprogrammiert und wollte nun eines meiner Fremd-Basic-Programme portieren um GLBasic etwas näher kennenzulernen.  Da ich es gewohnt bin alle Zahlen möglichst durch lesbaren Text zu ersetzen benutze ich sehr gerne viele "Constants". Ihr könnt Euch denken was jetzt kommt:
Es wäre schön, wenn man am Anfang seine Konstanten automatisch durchnummerieren lassen könnte, es wäre genial, wenn es z.b. so ginge
(StartConstants + EndConstants sind jetzt mal imaginäre neue Befehle, genauso gut könnte man das auch noch auf GlobalConstants und LocalConstants ausweiten um es perfekt zu machen)



--- Code: (glbasic) ---StartConstants  Direction
    Forward = 1
    Left
    Backward
    Right
EndConstants

--- End code ---

English:

"Left" would get assigned a 2, "Backward" 3 etc.

In code one could read "Direction.Forward" and knows exactly what is meant.
Assigning 1 at "Forward" will overwrite the default-starting-value of 0 in an enumeration. User should be able to assign any (integer) so the following element gets increased by 1 assuming the current lines value, so "Left" gets assigned a 2.

But would be enough with just single-words with no dots to classify them, as in the code below:
   
Deutsch:
 
"Left" hätte automatisch den Wert 2, "Backward" 3 usw.
 
Im Code könnte man dann mit "Direction.Forward" sehr genau erkennen was gemeint ist.
Das Zuweisen der 1 für "Forward" überschreibt den Default-Start mit 0 einer Enumeration. Man sollte jeglichen (integer) Wert zuweisen können, darauf folgende Elemente werden um 1 erhöht - vom gegenwärtigen Wert ausgehend, also "Left" bekäme automatisch 'ne 2.

Es wäre aber bereits ausreichend wenn man nur einzelne Worte definieren könnte, dann würde man das eben einfach so schreiben:
 

--- Code: (glbasic) ---Enumerate
  Sprite_Player
  Sprite_Enemy
  Sprite_Bullet
// ...
  Sprite_LAST
EndEnumerate
Global mySprite[Sprite_LAST] AS t_SpriteProperties
// wobei t_SpriteProperties mal ein beliebiger, bestehender TYPE ist
// where t_SpriteProperties is some existing sample TYPE

--- End code ---



if I squeeze some in before Sprite_LAST later, the dimensioning and enumerating is done all right by default
btw. It'll surely make only sense for Integer-Constants to enumerate them
   
wenn ich nun vor Sprite_LAST noch welche einschiebe ist alles automatisch richtig nummeriert, dimensioniert etc.
nebenbei bemerkt macht das Ganze sicherlich nur Sinn für Ganzzahlen-Konstanten 
 
 

Quentin:
ENUM gibts leider noch nicht in GLBasic. Du kannst dir ja mit einem TYPE behelfen, der dir das gewünschte liefert, müsstest allerdings alle Aufzählungen explizit mit Werten versehen. Das wäre halt die Mehrarbeit.


--- Code: (glbasic) ---TYPE tDirection
forward = 1
backward = 2
left = 3
right = 4
ENDTYPE


LOCAL direction AS tDirection

STDOUT "Vorwaerts:   " + direction.forward + "\n"
STDOUT "Rueckwaerts: " + direction.backward + "\n"
STDOUT "Links:       " + direction.left + "\n"
STDOUT "Rechts:      " + direction.right + "\n"

KEYWAIT

--- End code ---

UserWithoutGLBasic:

--- Quote ---ENUM gibts leider noch nicht in GLBasic.

--- End quote ---
Deswegen ja mein request :D
Und die Mehrarbeit wollte ich mir doch gerade dadurch ersparen
- denn wenn ich noch neue Elemente einfügen würde, z.B. Up und Down und die noch vor allen anderen stehen sollen muss ich manuell alles umnummerieren. Gefällt's mir dann nicht und ich nehme Up+ Down raus krieg ich schon 'ne mittlere Krise weil ich ja nochmal alles umnummerieren muss...

:? ... ein Type enthält aber doch Variablen die den (Variablen-)Speicher belegen.
Constants werden sicher vor dem Compilieren durch reelle Werte ersetzt.

kanonet:
Hmm, ich sehe zwar wofür man es nutzen könnte, glaube aber nicht, dass es wirklich nötig ist, zumindest gibt es Sachen die deutlich nötiger sind.

Übrigens für SpriteIDs gibt es GENSPRITE dass automatisch die nächste freie ID auswählt. Gleiches gilt für Sounds, etc...

UserWithoutGLBasic:

--- Quote from: kanonet on 2013-Mar-05 ---Hmm, ich sehe zwar wofür man es nutzen könnte, glaube aber nicht, dass es wirklich nötig ist, zumindest gibt es Sachen die deutlich nötiger sind.

Übrigens für SpriteIDs gibt es GENSPRITE dass automatisch die nächste freie ID auswählt. Gleiches gilt für Sounds, etc...

--- End quote ---
Sprites waren nur ein Beispiel. Ich könnte genausogut die Controls in einem GUI so nummerieren uvm. Zudem wäre die SpriteID sicher nur ein Wert den ich im Type zum jeweiligen Steuerelement speichern würde und dann könnte sich das z.B. so lesen:


--- Code: (glbasic) ---myControl[Control.ButtonOK].SpriteID = GenSprite()
myControl[Control.ButtonCancel].SpriteID = GenSprite()
myControl[Control.ButtonExit].SpriteID = GenSprite()
// ...
DrawSprite myControl[Control.ButtonExit].SpriteID, myControl[Control.ButtonExit].X, myControl[Control.ButtonExit].Y
// etc.

--- End code ---

Navigation

[0] Message Index

[#] Next page

Go to full version