Die runden Klammern werden in FreeBASIC für zwei Sprachkonstrukte verwendet:
- Reihenfolge der Abarbeitung der Glieder eines Ausdrucks
- Indizierung von Arrays
Reihenfolge der Abarbeitung der Glieder einer math. Gleichung
Die runden Klammern werden in FreeBASIC wie in jeder mathematischen Gleichung eingesetzt und beeinflussen die Abarbeitung eines Ausdrucks. Dabei gilt, dass zuerst der Wert der Klammer berechnet wird, und anschließend alle anderen Operationen in der Reihenfolge ihrer Priorität abgehandelt werden.
Dabei gilt die folgende Hierarchie der Operatoren:
- Klammern ()
- Potenzierung (^)
- Negierung (-)
- Division (/)
- Multiplikation (*)
- Integerdivision (\)
- Addition, Subtraktion (+, -)
- Vergleiche (=, <>, <, >, <=, >=)
- logische Operatoren (NOT, AND, OR, XOR, EQV, IMP)
- ANDALSO, ORELSE
- Wertzuweisung (=)
Dementsprechend kommen folgende Werte zustande:
PRINT (3 + 4) * 5
PRINT -(1 + 1) ^ 2
PRINT (3 * (5 + 1)) + (-2 - (1 * 1))
Ausgabe:
35
-4
15
Indizierung von Arrays
Wie unter DIM beschrieben, kann man sich ein Array als eine Liste bzw. Tabelle vorstellen, in der Werte gespeichert werden. Der Zugriff auf diese Werte erfolgt mittels Indizes, die in Klammern hinter dem Bezeichner des Arrays genannt werden.
Beispiel 1: Dimensionierung (Erstellung) eines Arrays:
DIM AS INTEGER myArray(1 TO 10)
' ^ ^ ^
' | | +-- Anzahl der Elemente
' | +---------- Bezeichner des Arrays
' +---------------------- Datentyp des Arrays
Diese Zeile legt das Verhalten des Arrays im Wesentlichen fest.
Wie bereits erwähnt, wird auf Elemente des Arrays zugegriffen, indem zuerst der Bezeichner genannt wird, gefolgt vom Index des Elements in Klammern. Dabei gelten dieselben Regeln für den Lese- wie für den Schreibzugriff:
Beispiel 2: Zugriff auf Elemente eines Arrays:
DIM AS INTEGER myArray(10)
myArray(5) = 17
PRINT myArray(5)
SLEEP
Wie bereits erwähnt ist es nicht nur möglich, Listen zu erstellen; auch mehrdimensionale Tabellen können dargestellt werden. Dabei werden sowohl bei der Dimensionierung als auch beim Zugriff die Indizes durch Kommata getrennt.
Beispiel 3: Mehrdimensionale Arrays:
RANDOMIZE TIMER
SCREENRES 320, 200
DIM AS INTEGER myTable(32, 20)
DIM AS INTEGER x, y
FOR x = 0 TO 32
FOR y = 0 TO 20
myTable(x, y) = RND * 255
NEXT
NEXT
FOR x = 0 TO 32
FOR y = 0 TO 20
LINE (x * 10, y * 10) - (x * 10 + 10, _
y * 10 + 10), myTable(x, y), BF
NEXT
NEXT
SLEEP
Es ist möglich, ganze Arrays an eine Prozedur zu übergeben. Dazu wird als Parameter der Bezeichner des Arrays übergeben, gefolgt von den runden Klammern, jedoch ohne Angabe von Indizes, aber immer mit Typ.
Beispiel 4: Übergabe eines Arrays an eine Prozedur:
RANDOMIZE TIMER
DECLARE SUB ShowTable( Table() AS INTEGER )
DIM AS INTEGER myTable(4, 4)
DIM AS INTEGER x, y
FOR x = 0 TO 4
FOR y = 0 TO 4
myTable(x, y) = RND * 9
NEXT
NEXT
ShowTable myTable()
SLEEP
SUB ShowTable( Table() AS INTEGER )
DIM AS INTEGER x, y, MaxX, MaxY
MaxX = UBOUND(Table, 1)
MaxY = UBOUND(Table, 2)
FOR x = 0 TO MaxX
FOR y = 0 TO MaxY
LOCATE y * 2 + 1, x * 3 + 1
PRINT Table(x, y); "|"
LOCATE y * 2 + 2, x * 3 + 1
PRINT "--+"
NEXT
NEXT
END SUB