Zum Inhalt

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, ...).