Kontrollstrukturen & Schleifen
Lua verfügt über die für Programmiersprachen typischen Schleifenstrukturen und if, then, elseif und else Konstrukte. Im Folgenden werden nur die wichtigsten Aspekte skizziert.
Bedingte Ausführung
if CONDITION then
IF_BRANCH
elseif OTHER_CONDITION then
ELSEIF_BRANCH
else
ELSE_BRANCH
end
Eine Bedingung wird wie ein boolescher Werte interpretiert, d.h. Werte, die nicht nil/false sind, werden als wahr aufgefasst. Dies führt dazu, dass die IF_BRANCH ausgeführt wird. Andernfalls wird die OTHER_CONDITION ausgewertet und abhängig vom Ergebnis wird entweder die ELSEIF_BRANCH oder die ELSE_BRANCH ausgeführt.
if 0 then
cna.print("A")
else
cna.print("B");
end
-- result: "A"
if 3 > 10 or nil and false then
cna.print("C")
else
cna.print("D");
end
-- result: "D"
Ein Beispiel aus CadnaA-Lua könnte wie folgt lauten: Je nach Wert des LP1 Attributs des Immissionspunktes soll eine Textvariable CATEGORY geschrieben werden:
for ip in cna.tables.imm:all() do
if ip.LP1 > 80 then
ip.memo_var.CATEGORY = 1
elseif ip.LP1 > 65 then
ip.memo_var.CATEGORY = 2
else
ip.memo_var.CATEGORY = 3
end
cna.print(ip.BEZ.. "): CAT " ..ip.memo_var.CATEGORY)
end
Schleifen (Loops)
In Lua sind mehrere Schleifenkonstrukte verfügbar. repeat ... until CONDITION führt Anweisungen aus, bis die Bedingung CONDITION true ist. while CONDITION do ... end wertet ... solange aus, bis die Bedingung CONDITION true ergibt. Die wichtigste Schleifenkonstrukt für CadnaA-Lua ist jedoch die Schleife for do, die in zwei Arten kommt. Die einfache for-Schleife zählt vom Wert FROM aus, bis zu dem Wert TO, indem STEP zu dem Wert bei jedem Schritt addiert wird.
local i
for i = FROM,TO,STEP do
....
end
Das andere Schleifenkonstrukt durchläuft Datenstrukturen. Diese Schleifenart wird häufig in CadnaA-Lua Makros verwendet, um Operationen auf eine Anzahl von CadnaA-Objekten anzuwenden. Bitte beachten Sie, dass die Variable element als local deklariert wird. Dies stellt die übliche Praxis und verhindert Fehler.
local element
for element in liste do
....
end
Funktionen
Funktionen können in Lua direkt definiert werden. Normalerweise sollten Funktionen in CadnaA-Lua auch als local deklariert werden:
local function squaring(x)
return x * x
end
Nun kann die Funktion aufgerufen werden mit
squaring(4) -- result: 16
Eine besondere Art von Funktionen sind sogenannte methods. Funktionen vom Typ methods sind den Lua Tabellen zugeordnet. Diese werden mit einem Doppelpunkt aufgerufen: object:method(x1, x2, x3, ...). Die grundlegende Eigenschaft der Funktionen vom Typ methods ist, dass sie immer abhängig vom Objekt auf der linken Seite sind. Die Notation mit Doppelpunkt kann zu komplexeren Aufrufen erweitert werden, object.method(object, x1, x2, x3, ...).