Waldemar Celes, Roberto Ierusalimschy, Luiz Henrique de Figueiredo (Foto von Ernani d'Almeida, 2011)
Lua, entwickelt in den frühen 1990er Jahren von Waldemar Celes, Roberto Ierusalimschy und Luiz Henrique de Figueiredo in Brasilien, ist eine leichte, eingebettete Skriptsprache, die für ihre Einfachheit und Effizienz bekannt ist.
Lua wird häufig in der Spieleentwicklung verwendet, um Spielmechaniken und Skripting zu implementieren, mit bekannten Beispielen wie World of Warcraft und Angry Birds. Darüber hinaus findet Lua Anwendung in eingebetteten Systemen und als Skriptsprache in Software wie Adobe Lightroom. Heutzutage ist Lua immer noch relevant, insbesondere in der Spieleindustrie und bei eingebetteten Anwendungen, da sie eine schnelle Ausführung und einfache Integration in andere Software bietet.
Lua ist eine Skriptsprache, was bedeutet, dass der Code zur Laufzeit interpretiert wird. Du hast zwei Möglichkeiten, Lua-Code auszuführen:
Möglichkeit 1: Lua-Code in der Lua-Shell ausführen
Öffne dazu ein Terminal, indem du entweder StrgJ drückst oder das Panel-Symbol rechts oben drückst. Dein Fenster sollte jetzt ungefähr so aussehen:
Starte nun die Lua-Shell, indem du lua
eingibst und dann Enter drückst. Du solltest eine Ausgabe wie diese sehen:
Jetzt kannst du Lua-Code direkt in der Shell eingeben und ausführen. Schreibe einfach print("Hello, world!")
und drücke Enter. Du solltest die Ausgabe Hello, world!
sehen.
Du kannst die Lua-Shell wieder beenden, indem du StrgD drückst.
Möglichkeit 2: Lua-Code in einer Textdatei speichern und ausführen
Lua-Programme werden in Textdateien mit der Endung .lua
geschrieben. Der Lua-Interpreter liest anschließend den Quelltext und führt ihn aus.
Stelle zuerst sicher, dass du keinen Ordner geöffnet hast. Um sicherzugehen, drücke einfach den Shortcut für »Ordner schließen«: StrgK und dann F. Dein Workspace sollte jetzt ungefähr so aussehen:
Klicke auf »New File« und wähle als Dateityp »Text File« (oder bestätige einfach mit Enter).
Schreibe nun den folgenden Code in die Datei:
1 |
print("Hello, World!") |
Da Visual Studio Code noch nicht weiß, dass es sich um Lua-Quelltext handelt, ist dein Programm momentan noch einfarbig, aber das wird sich gleich ändern. An dem weißen Punkt erkennst du, dass deine Änderungen noch nicht gespeichert sind.
Drücke nun StrgS, um die Datei zu speichern. Gib hello.lua
ein – der vollständige Pfad zu deiner Datei lautet dann /workspace/hello.lua
.
Sobald du die Datei gespeichert hast, wird sie automatisch als Lua-Datei erkannt und die Syntax wird hervorgehoben.
Um unser Programm auszuführen, müssen wir den Lua-Interpreter aufrufen und ihm den Dateinamen unseres Programms übergeben.
Öffne dazu ein Terminal, indem du StrgJ drückst und gib folgenden Befehl ein:
lua hello.lua
lua he
und drücke Tab, um den Dateinamen automatisch zu hello.lua
vervollständigen zu lassen. Du kannst danach ganz normal weiterschreiben.
Das Programm sollte die Nachricht Hello, World!
im Terminal ausgeben:
Wenn du einen Fehler im Code machst, wird Ruby eine Fehlermeldung ausgeben. Versuche zum Beispiel, statt print
das Wort prin
zu schreiben:
prin("Hello, World!")
Speichere die Datei und führe das Skript erneut aus:
lua hello.lua
Lua sollte eine Fehlermeldung ausgeben, die dir hilft, den Fehler zu finden:
Es lohnt sich, die Fehlermeldungen genau zu lesen, um den Fehler zu finden und zu beheben. Achte auf die Zeilennummer (in diesem Beispiel 1) und den Text, der dir sagt, was falsch ist. Denke daran, den Fehler wieder zu beheben, bevor du das nächste Beispiel ausprobierst.
#!
Bisher musst du, um dein Skript auszuführen, immer den Lua-Interpreter explizit aufrufen. Wenn du dein Skript wie ein normales Programm ausführen möchtest, kannst du ein sogenanntes Shebang am Anfang deiner Datei hinzufügen. Das Shebang besteht aus einer Raute #
gefolgt von einem Ausrufezeichen !
und dem Pfad zum Lua-Interpreter. In unserem Fall sieht das so aus:
#!/usr/bin/env lua
Füge diese Zeile ganz oben in deinem Skript ein und speichere die Datei. Bevor wir das Skript ausführen können, müssen wir es noch ausführbar machen. Das machen wir mit dem Befehl chmod
:
chmod +x hello.lua
Jetzt können wir das Skript direkt ausführen:
./hello.lua
Im zweiten Beispiel wollen wir eine Zahl in ihre Primfaktoren zerlegen. An diesem Beispiel kannst du sehen, wie man in Lua Benutzereingaben verarbeitet und Schleifen verwendet. Erstelle eine neue Datei mit StrgAltN und schreibe den folgenden Code hinein:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
-- Function to find prime factors function primeFactors(n) local factors = {} for i = 2, n do while n % i == 0 do table.insert(factors, i) n = n / i end end return factors end -- Read number from user io.write("Enter a number: ") local number = tonumber(io.read()) -- Find and print prime factors local factors = primeFactors(number) io.write("Prime factors of " .. number .. ": ") for _, factor in ipairs(factors) do io.write(factor .. " ") end print() |
Speichere die Datei unter dem Namen factor.lua
und führe sie aus:
Das Programm hat die Zahl 123 in ihre Primfaktoren zerlegt und ausgegeben. Wenn du allerdings eine sehr große Zahl wie 3000000000 verwendest, dauert die Berechnung sehr lange (probier es gern aus, du kannst das Programm mit StrgC abbrechen).
Im dritten Beispiel wollen wir eine Liste von 10 Zufallszahlen sortieren. Dafür verwenden wir den Bubblesort-Algorithmus, der zwar nicht besonders effizient ist, aber sehr einfach zu verstehen und zu implementieren. Der Bubblesort-Algorithmus funktioniert, indem er die Liste mehrmals durchläuft und benachbarte Elemente vertauscht, wenn sie in der falschen Reihenfolge sind.
An diesem Beispiel kannst du sehen, wie man in Lua Listen verwendet, Funktionen verwendet und Schleifen verschachtelt.
Erstelle eine neue Datei und schreibe den folgenden Code hinein:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
-- Generate an array of 10 random integers local array = {} for i = 1, 10 do array[i] = math.random(1, 100) end -- Print the original array print("Original array:") for i = 1, 10 do io.write(array[i] .. " ") end print() -- Bubble sort function local function bubbleSort(arr) for i = 1, #arr do for j = 1, #arr - i do if arr[j] > arr[j + 1] then arr[j], arr[j + 1] = arr[j + 1], arr[j] end end end end -- Sort the array using bubble sort bubbleSort(array) -- Print the sorted array print("Sorted array:") for i = 1, 10 do io.write(array[i] .. " ") end print() |
Speichere das Skript unter dem Namen bubblesort.lua
und führe es aus:
Das Programm hat eine Liste von 10 Zufallszahlen sortiert. Versuche, den Quelltext so zu verändern, dass statt 10 Zahlen 100 oder mehr Zahlen sortiert werden.
In diesem Kapitel hast du an drei Beispielen gesehen, wie man ein einfaches Lua-Skript schreiben und ausführen kann. Das ist natürlich nur ein erster Eindruck. Um Lua wirklich zu beherrschen, musst du noch viel mehr lernen – am besten, indem du eigene Skripte schreibst und ausprobierst. Die Buchhandlungen, Bibliotheken und Youtube sind voll von Material für dich. Viel Spaß beim Programmieren!