Sprachversion 2
  • 11 Sep 2024
  • 2 Minutes to read
  • Dark
    Light
  • PDF

Sprachversion 2

  • Dark
    Light
  • PDF

The content is currently unavailable in English. You are viewing the default German version.
Article summary

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


Was this article helpful?