- 11 Sep 2024
- 2 Minutes to read
- Print
- DarkLight
- PDF
Sprachversion 2
- Updated on 11 Sep 2024
- 2 Minutes to read
- Print
- DarkLight
- PDF
Folgende Änderungen der Spracheigenschaften treten in Sprachversion 2 auf:
Erweiterte Zuweisungsoperatoren
Operator | Entsprechung |
a++ | a= a+1 |
a-- | a= a-1 |
a+= b | a= a+b |
a-= b | a= a-b |
a*= b | a= a*b |
a/= b | a= a/b |
+= funktioniert zusätzlich auch auf Strings.
Variablendeklaration mit Zuweisung
VARIABLE i = 0
Variablendeklaration in einer FOR-Schleife
Zähler können innerhalb der FOR-Schleife deklariert werden. Folgende Varianten sind gültig:
Variante 1
FOR VARIABLE i=1 TO 10 STEP 3 DO
MESSAGE i
ENDFOR
!Zählervariable steht nach der FOR-Schleife nicht mehr zur Verfügung
Variante 2
VARIABLE i = 0
FOR i=1 TO 10 STEP 3 DO
MESSAGE i
ENDFOR
!Zählervariable steht innerhalb der Procedure zur Verfügung
Variante 3
FOR i=1 TO 10 STEP 3 DO
MESSAGE i
ENDFOR
!Zählervariable steht während der gesamten Konfiguration zur Verfügung (global deklariert)
Neue IF-Schreibweise
Einzeilig:
IF Bedingung THEN Statement ENDIF
Mehrzeilig:
IF Bedingung THEN
!beliebig viele Statements
ELSEIF Bedingung THEN
!beliebig viele Statements
ELSE
!beliebig viele Statements
ENDIF
ENDFOR, ENDWHILE, ENDCASE, ENDWITH
So wie bei der IF-Schreibweise das ENDIF am Ende steht, gibt es entsprechende Schlüsselwörter nun auch für Schleifen und andere Blöcke.
FOR ZählVar1 = Anfangswert TO Endwert DO
Anweisung1
Anweisung2
ENDFOR
EXIT/SKIP für Schleifen
Möglichkeit eine Schleife frühzeitig zu verlassen bzw. einen Durchlauf zu überspringen.
FOR i = 1 TO 10 DO
IF i = 5 THEN EXITFOR/SKIPFOR
MESSAGE i
ENDFOR
Lokale Variablen
Variablen die mit DEFINE VARIABLE definiert werden haben lokale Gültigkeit aber globale Sichtbarkeit. Das gilt auch für Parameter die mit DEFINE PARAMETER definiert werden. Ab Sprachversion 2 gibt es auch echte lokale Variablen, also mit lokaler Sichtbarkeit. Die Schreibweise unterscheidet sich im Fehlen des Schlüsselwortes DEFINE
PROCEDURE HdmTest
PARAMETER prefix
VARIABLE i = 8
MESSAGE prefix + " " + STR$(i)
END
Die global sichtbare lokale Variable, und damit das Schlüsselwort DEFINE, ist dadurch nicht mehr empfohlen.
EXEC
Die neue Laufzeitfunktion EXEC ist vergleichbar mit EVAL, wertet aber im Gegensatz dazu nicht nur einen Ausdruck aus sondern führt eine komplette Anweisung oder auch mehrere aus.
EXEC("v = 10")
MESSAGE v
Klammern bei Funktionsaufrufen
Bei Aufrufen von parameterlosen Funktionen darf ein leeres Klammernpaar stehen.
FUNCTION GetHello
RETURN "Hello"
END
MESSAGE GetHello()
In Version 2 sind diese Klammern optional, voraussichtlich ab Version 3 werden sie Pflicht.
Qualifizierung von Funktionsaufrufen
Funktionen dürfen beim Aufruf mit dem Makronamen qualifiziert werden.
MESSAGE Functions.Square(2) !Die Funktion "Square" ist im Makro "Functions.bas" definiert
Ermittlung der Dimension eines Arrays
Die neue Laufzeitfunktion DIM gibt die Größe eines Arrays zurück.
ergebnis = DIM(variable)
Leerstring bei der Laufzeitfunktion "Entry"
In der Laufzeitfunktion "Entry" darf ein Leerstring als zweiter Parameter übergeben werden.
a = ""
MESSAGE ENTRY(1, a)
Der einzige erlaubte Index ist in diesem Fall "1". Das Ergebnis ist wieder eine Leerstring. Bei jedem anderen Index kommte der Lauzeitfehler "Index was outside the bounds of the array".
Besseres Fehlerhandling zur Compilezeit
Mit Sprachversion 2 verbessert sich außerdem das Fehlerhandling zur Compilezeit. Folgende Prüfungen werden nun zusätzlich durchgeführt:
Keine erreichbare Verwendung des zugewiesenen Wertes für Variable
PROCEDURE HdmFpBreite
VARIABLE nMinBreite
nMinBreite = 1000 !Die Zuweisung kann nie Verwendet werden, da die lokale Variable, bevor Sie verwendet wird, bereits zu 100% überschrieben wird. (durch ELSE-Zweig) Die Zeile kann also gelöscht werden.
IF cFE.cSystem = “A“ THEN
nMinBreite = 1200
ELSE
nMinBreite = 1500
ENDIF
VALIDANSWERS.RANGE = “0:“ + STR$(nMinBreite) + “|2000|mm”
END
Lokale Variable wird nie verwendet
PROCEDURE HdmFpBreite
VARIABLE nMinBreite, nMaxBreite !Die lokale Variable nMaxBreite wird nie Verwendet, daher gibt der Compiler eine Warnung aus. (Schreibfehler? Logikfehler?)
IF cFE.cSystem = “A“ THEN
nMinBreite = 1200
ELSE
nMinBreite = 1500
ENDIF
VALIDANSWERS.RANGE = “0:“ + STR$(nMinBreite) + “|2000|mm”
END
Mögliche Verwendung der Variable ohne zugewiesenen Wert
PROCEDURE HdmFpBreite
VARIABLE nMinBreite
IF cFE.cSystem = “A“ THEN
nMinBreite = 1200
ENDIF
VALIDANSWERS.RANGE = “0:“ + STR$(nMinBreite) + “|2000|mm” !Die lokale Variable nMinBreite hat keinen zugewiesenen Wert falls System <> A ist. (Lösung: nMinBreite am Anfang zuweisen, oder ELSE-Zweig ergänzen.
END