Lua: Anweisungen


< Grundlagen
Gesamtübersicht (Start) / Seminarthemen WS 2009/10

Übersicht


Zuweisung

Lua unterstützt neben der "normalen" Zuweisung auch sogenannte Mehrfachzuweisungen. Dabei werden mit nur einer Anweisung mehreren Variablen ein Wert zugewiesen. In folgendem Beispiel bekommt x den Wert 10 und y den Wert "Hallo Welt".
x, y = 10, "Hallo Welt"

Hierbei wird zunächst die rechte Seite ausgewertet und erst danach wird die Zuweisung durchgeführt. Auf Grund dieser Eigenschaft ist es z.B. sehr leicht in Lua den Inhalt zweier Variablen zu tauschen, wie folgendes Beispiel zeigt.
x, y = 10, "Hallo Welt"
y, x = x, y
print(x)  --> Hallo Welt
print(y)  --> 10

Werden auf der linken Seite jedoch mehr Variablen angegeben, als auf der rechten Seite, dann bekommen die übrigen Variablen den Wert nil.
x, y, z = 7, 13
print(x, y, z)  --> 7    13    nil

Sind links weniger Variablen angegeben, als rechts Werte, dann werden die übrigen Werte einfach ignoriert.
x, y = 7, 13, 36
print(x, y)  --> 7    13

if

Für bedingte Anweisungen gibt es in Lua die bekannte if-Anweisung.
Hinweis: Generell gilt für Bedingungen in Lua (auch die bei den Schleifen) jeder Wert als wahr, der nicht nil oder false ist.

Ein einfaches if:
if x > y then
	x = y
end

Ein if mit else-Teil:
if x > y then
	return x
else
	return y
end

Da es in Lua keine switch-Anweisung gibt, dient eine syntaktische Erleichterung in Form des elseif als Ersatz, um verschachtelte if-Anweisungen zu vereinfachen.

Ein Beispiel:
if x == 1 then
	return f1()
elseif x == 2 then
	return f2()
else
	return f3()

while

Die while Anweisung repräsentiert eine Schleife mit Eintrittsbedingung. Die Schleife läuft solange, wie die Bedingung nach dem Schlüsselwort while wahr ist.
i = 10
while i > 0 then
	i = i - 1
end

repeat

Die repeat Anweisung repräsentiert eine Schleife mit Austrittsbedingung. Die Schleife läuft solange, wie die Bedingung nach dem Schlüsselwort until wahr ist.
i = 10
repeat
	i = i - 1
until i == 0

Das numerische for

Das numerische for dient als Zählschleife in Lua. Dabei muss ein Startwert und ein Endwert angegeben werden. Der Schrittweite ist optional. Wenn keine Schrittweite angegeben wird, ist 1 der Standardwert. Die Zählvariable ist dabei lokal in der Schleife.
for var = start, ende, schrittweite do
	-- Schleifenrumpf
end
Ein Beispiel:
for i = 1, 10 do
	print(i)
end

Das generische for

Das generische for in Lua entspricht den aus einigen anderen Skriptsprachen bekannten foreach-Schleifen. Sie iteriert über eine Menge von Werten.

Syntax:
for Variablenliste in Ausdrucksliste do
  -- hier wird was gemacht
end

In der Regel wird für die Ausdrucksliste eine sogenannte Iteratorfunktion eingesetzt, welche in jedem Schleifendruchlauf neue Werte für die Variablen in der Variablenlist liefert.
Folgendes Beispiel demonstriert, wie mit Hilfe einer generischen for-Schleife die Werte eines Arrays ausgegeben werden können.
-- a sei ein Array
for index, wert in ipairs(a) do
	print(wert)
end

In diesem Beispiel ist ipairs die Iteratorfunktion. Diese Funktion bekommt eine Tabelle als Parameter übergeben und gibt in jedem Schleifendurchlauf zwei Werte zurück, nämlich einen Index und den dazugehörigen Wert aus der Tabelle. Diese beiden Werte werden hier index und wert zugewiesen und können so im Schleifenrumpf genutzt werden. Vielleicht empfinden Sie es als etwas ungewöhnlich, dass eine Funktion unterschiedliche Werte zurückgibt, wenn sie mit den gleichen Daten aufgerufen wird, aber dieses Rätsel werden wir später im Kapitel über Closures auflösen. Dort werden auch noch weitere Beispiele zum generischen for gezeigt und erklärt, wie man selbst solche Funktionen schreibt. An dieser Stelle akzeptieren wir erstmal, dass es solche Iteratorfunktionen gibt.
Eine andere ähnliche und nützliche Iteratorfunktion ist pairs, die alle Schlüssel einer Tabelle zurückgibt, also auch z.B. String Schlüssel.

< Grundlagen
Zum Seitenanfang