GLBasic Benutzerhandbuch

Main sections

09 Types

Von Variablen in Types



Types sind eine Methode um Daten zu strukturieren. Warum sollte man Types verwenden, um Daten zu strukturieren? Types können die Lesbarkeit des Codes drastisch erhöhen, und werden damit leichter zu Debuggen. Gut gemachte Types können den Code erheblich verkürzen, da man mit Blöcken von Variablen arbeitet, statt einzelne Variablen zu verwenden.

Um einen Typ zu definieren scheibt man:
TYPE name_des_tys
// Typ Mitglieder
ENDTYPE


Der TYPE ist quasi eine Blaupause, wie die Variable später auszusehen hat.

Jetzt, da man einen Typ hat, kann man ihm Mitglieder (member) hinzufügen. Das sind Variablen, auf die mit einer Instanz eines Typen zugegriffen werden kann.
Man kann entweder Zahlen oder Nummern-Variablen als Member verwenden und diesen Voreingestellte Werte zuweisen. Wenn man keine Werte zuweist haben Nummern den Wert 0, und Wörter den Wert "".


TYPE TBuch
// Zahl, hat den Wert 0
AnzahlDerSeiten

// Zahl mit voreingestelltem Wert
CoverColor = RGB(128,64,0)

// Wort mit Wert = ""
Titel$

// Wort mit zugewiesenem Wert
Autor$ = "John Doe"
ENDTYPE


Man kann auch Felder in einen Typ packen. Diese Felder sind anfangs nicht initialisiert (DIM name[0]). Man kann jedoch eine Standardgröße vorgenben, so dass beim Erstellen einer Instanz des Typen (siehe später) das Feld bereits dimensioniert ist. Selbstverständlich kann man trotzdem ein DIM oder REDIM auf das Feld anwenden.

TYPE TKino
// ein Feld, kein DIM
verkaufte_sitze[]

// ein Feld, dimensioniert mit DIM[32][32]
freie_sitze[32][32]

ENDTYPE


Um eine Instanz eines Typen zu erstellen schreibt man einfach:

GLOBAL Bibel AS TBuch
LOCAL MobyDick AS TBuch

und greift auf die Mitglieder der Bibel (vom Typ BUCH) so zu:
Bibel.AnzahlDerSeiten=4500
Bibel.Titel$ = "The Holy Bibel"
Bibel.Autor$ = "King James"


Man kann auch Typen (per Referenz) an Funktionen übergeben. "per Referenz" heisst, dass ein ändern des Wertes innerhalb der Funktion auch den Wert ausserhalb ändert. Wie das auch mit Feldern der Fall ist.

// <...> BUCH Typ Definition
LOCAL Bibel AS TBuch, Another AS TBuch
MakeBibel(Bibel)
Another = Bibel // copy 'Bibel' to 'Another'

FUNCTION MakeBibel: any AS TBuch
any.AnzahlDerSeiten=4500
any.Titel$ = "The Holy Bibel"
any.Autor$ = "King James"
ENDFUNTCTION


Um die Sache noch zu versüßen, kann man Typen auch verschachteln:
TYPE TArbeiter:
Name$
Annual_Wage
ENDTYPE

TYPE TBuecherei:
BUCHs[] AS TBook
Employees[12] AS TArbeiter
ENDTYPE


Und als Rückgabewert einer Funktion verwenden:

LOCAL Bibel AS TBuch
Bibel = MakeBUCH("The Holy Bibel", 4500)

FUNCTION MakeBUCH AS TBuch: name$, nPages
LOCAL temp AS TBuch
temp.Titel$ = name$
temp.AnzahlDerSeiten = nPages
RETURN temp
ENDFUNCTION

Vergisst man von solch einer Funktion das RETURN, wird eine Instanz des Rückgabetyps (hier TBuch) zurückgegeben, dessen Werte mit den Standardwerten initialisiert sind.

Hat man ein Feld von TYPEs, kann man mit DIMDEL oder DELETE und DIMPUSH Elemente herauslöschen und neue unten hinzufügen.

Möchte man durch alle Elemente in einem TYPE Feld durchlaufen, kann man FOREACH verwenden.

Der letze Wert eines Feldes ist a[LEN(a[])-1] oder auch nur kurz a[-1].

See also...