Referenz - Runde Klammern
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 eines Ausdrucks
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 (=)
Eine vollständige Liste zur Hierarchie findet sich im Referenzartikel zu den Operatoren.
Dementsprechend kommen folgende Werte zustande:
PRINT (3 + 4) * 5
PRINT -(1 + 1) ^ 2
PRINT (3 * (5 + 1)) + (-2 - (1 * 1))
Ausgabe:
35
-4
15
Auch in Bedingungsstrukturen müssen oft Klammern eingesetzt werden, um bei der Abarbeitung die gewünschte Reihenfolge zu erreichen.
Beispiel:
DIM AS INTEGER a = 4
IF (a < 10 OR a > 20) AND a <> 4 THEN
PRINT "a liegt im richtigen Bereich."
END IF
' Überprüfen, ob a eine ungerade Zahl ist
IF (a AND 1) = 1 THEN PRINT "a ist ungerade."
SLEEP
Beide Bedingungen sind nicht erfüllt. Würden die Klammern weggelassen, dann wäre die Abarbeitungsreihenfolge eine andere, weshalb beide Bedingungen erfüllt wären.
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.
Auf die einzelnen Elemente des Arrays wird 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
Bei mehrdimensionalen Arrays 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
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
In DECLARE-Zeilen können die Namen der Parameter ausgelassen werden (anonyme Parameter). Wird dabei der Name eines Array-Parameters ausgelassen, müssen dennoch die runden Klammern verwendet werden, um dem Compiler zu signalisieren, dass es sich bei dem anonymen Parameter um ein Array handelt.
Beispiel 5: Anonyme Array-Parameter in DECLARE-Zeilen
Declare Sub foo(() As Integer)
Dim As Integer bar(0 To ...) = {0, 1, 2}
foo(bar())
Sleep
Sub foo(array() As Integer)
For i As Integer = LBound(array) To UBound(array)
Print array(i)
Next
End Sub
Unterschiede zu früheren Versionen von FreeBASIC:
Seit FreeBASIC v0.90 können in DECLARE-Zeilen die Namen von Array-Parametern ausgelassen werden.
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|