Lua ist eine imperative Skriptsprache, die 1993 von der Computer Graphics Technology Group der Päpstlichen Katholischen Universität von Rio de Janeiro in Brasilien entwickelt wurde. Sie wird gerne als embedded-Sprache genutzt, es ist aber auch durchaus möglich, eigenständige Programme mit Lua zu schreiben. Durch eine API lassen sich zur Laufzeit C-Programme einbinden, was sie durchaus für hochperformante Arbeiten nützlich macht.

In dieser Einführung zeigen wir die allgemeine Syntax der Sprache anhand von Beispielen. Wie immer verweisen wir für tieferes Verständnis auf die offizielle Lua-Doku. Im zweiten Teil der Lua-Einführung behandeln wir Funktionen und Kontrollstrukturen. In den folgenden Beiträgen wird es um Tables, Errorhandlung und um das Entwickeln und Einbinden von einem einfachen C-Modul gehen.

Für die ersten Schritte reicht der offizielle interaktive Online-Interpreter aus. Für komplexere Aufaben lohnt es sich, Lua lokal zu installieren. Im Web finden sich zahllose Tutorials, die dieses Thema behandeln.

 

Allgemeine Merkmale

  • dynamische Typisierung
  • plattformunabhängig (Bytecode)
  • theoretisch objektorientiert
  • Garbage Collection
  • unterstützt einen interactive Mode
  • Paketmanager Luarocks
  • no batteries included

 

Datentypen

  • nil
  • boolean
  • number (integer, float)
  • string
  • function
  • userdata
  • thread
  • table (Datenstruktur)

 

Einführung in die Sprache

Kommentare

Wir unterscheiden zwischen einzeiligen und mehrzeiligen Kommentaren.


-- das ist einzeiliger Kommentar

--[[So erzeugt man einen mehrstelligen Kommentar. Sehr einfach, aber ungewöhnlich.--]]

Variablenzuweisung

Lua typisiert dynamisch, unterstützt also das Duck-Typing-Konzept. In Lua ist alles ein Wert, kann also einer Variablen zugewiesen werden. So kann  zum Beispiel auch eine Funktion einer Variablen zugewiesen  werden. Variablen sind in Lua global, es sei denn, sie werden mit dem Schlüsselwort local deklariert. In diesem Falle sind sie nur in dem Block verfügbar, in dem sie deklariert worden sind, z.b. einer Funktion.

Wie die meisten Skriptsprachen referenziert die Variable nicht direkt auf den Speicher, sondern in eine Art Objekt (Lua ist intern table-orientiert).

 

 

-- einfache Zuweisungen

a = 3 --wir weisen der Variablen a den Wert 3 zu
print( type(a) ) -- Datentyp prüfen: number

country = "Germany" -- einfache Strinzuweisung

p = a / 2 -- zwei Integer dividiert: 1.5

local c = "orange" -- Variable c hat den Stringwert "orange"
local c = 'orange' -- geht auch mit einfachen Anführungszeichen
local c = 3 -- c ist jetzt drei dank dynamischer Typisierung

Mehrzeilige Strings

 
q = [[ das ist ein 
mehrzeiliger 
string ]]

boolsche Werte, nil

 
isTrue = true -- isTrue ist jetzt true
isTrue = soWhat -- nicht existente Varialbe soWhat ergibt nil
print(isTrue) --nil

i = 3 -- i is true
i = 0 -- i is true
if i then print("i ist wahr") end

Inkrement, Dekrement

i = 1
i++ -- gibt es in Lua nicht
i-- --gibt es in Lua auch nicht
i = i+1 -- ist der richtige Weg

Table

t = {"Blaubeere", "Waldbeere", "Superbeere"} --table t mit vordefinierten werten
print t[2] -- wie in vielen Sprachen greifen wir so auf den index zu

pets = {} --Zuweisen eines leeren Tables an die Variable pets
pets[0] = "Maus" --index 0 referenziert auf String "Maus"
pets[1] = "Ziege" --index 1 referenziert auf String "Maus"

Table Indizies

pets = {}
pets = {"Maus", "Ziege", "Fisch"}
print( pets[0] ) -- nil, da in der Lua der Index im Gegensatz zu vielen anderen Sprachen bei 1 anfängt

pets = {}
pets["fische"] = {"Forelle", "Hai", "Goldfisch"} -- verschachtelte Tabelle
print( pets["fische"][1] ) --Forelle