Lua Spickzettel
Zuletzt aktualisiert
Hello World & Code ausführen
Lua ist minimal - eine einzige Anweisung läuft.
| Operation | Syntax |
|---|---|
| Eine Zeile ausgeben | print("Hello, World!") |
| Mehrere Werte ausgeben | print("x", 1, true) |
| Ohne Zeilenumbruch schreiben | io.write("Hi") |
| Kommentar | -- this is a comment |
| Mehrzeiliger Kommentar | --[[ ... ]] |
| Strings verketten | print("Hi " .. name) |
| Eine Datei ausführen | lua app.lua |
| Interaktive Shell | lua |
Variablen & Typen
Variablen sind standardmäßig global; deklariere lokale mit local.
| Operation | Syntax |
|---|---|
| Lokale Variable | local age = 30 |
| Globale Variable | count = 0 |
| Mehrfachzuweisung | local a, b = 1, 2 |
| Die acht Typen | nil, boolean, number, string, table, function, userdata, thread |
| Nil / Booleans | nil, true, false |
| Typ prüfen | type(x) gibt "number" zurück |
| In Zahl umwandeln | tonumber("42") |
| In String umwandeln | tostring(42) |
Strings
Strings sind unveränderlich; sowohl einfache als auch doppelte Anführungszeichen funktionieren.
| Operation | Syntax |
|---|---|
| Länge | #s oder string.len(s) |
| Verketten | s1 .. s2 |
| Groß-/Kleinschreibung | s:upper(), s:lower() |
| Teilstring | s:sub(1, 3) |
| Teilstring finden | s:find("ell") |
| Ersetzen (gsub) | s:gsub("a", "b") |
| Formatieren | string.format("%05d", 42) |
| Langer String | [[ multi\nline ]] |
Tables (die zentrale Datenstruktur)
Tables sind Luas einziger strukturierter Typ - sie dienen als Arrays, Maps und Objekte.
| Operation | Syntax |
|---|---|
| Leere Table | local t = {} |
| Array-Stil (1-basiert) | local t = {10, 20, 30} |
| Auf Array-Element zugreifen | t[1] (erstes Element) |
| Table im Map-Stil | local u = {name = "Ada", age = 30} |
| Auf Map-Wert zugreifen | u.name oder u["name"] |
| Einen Wert setzen | t[4] = 40, u.email = "a@x.com" |
| Länge des Array-Teils | #t |
| Array durchlaufen (ipairs) | for i, v in ipairs(t) do ... end |
| Alle Schlüssel durchlaufen (pairs) | for k, v in pairs(u) do ... end |
| Verschachtelte Table | local m = {a = {1, 2}} |
Kontrollfluss
Blöcke schließen mit end; nur nil und false sind falsy.
| Operation | Syntax |
|---|---|
| If / elseif / else | if x > 0 then ... elseif x < 0 then ... else ... end |
| Logische Operatoren | and, or, not |
| Numerisches for | for i = 1, 10 do ... end |
| For mit Schrittweite | for i = 10, 1, -1 do ... end |
| While-Schleife | while x < 100 do ... end |
| Repeat-until | repeat ... until done |
| Break | break |
| Ungleich-Operator | if a ~= b then ... end |
Funktionen
Funktionen sind Werte erster Klasse und können mehrere Ergebnisse zurückgeben.
| Operation | Syntax |
|---|---|
| Eine Funktion definieren | function add(a, b) return a + b end |
| Lokale Funktion | local function square(x) return x * x end |
| Anonyme Funktion | local f = function(x) return x * 2 end |
| Mehrere Rückgabewerte | function bounds() return 1, 10 end |
| Mehrere Rückgaben erfassen | local lo, hi = bounds() |
| Variadische Funktion | function sum(...) ... end |
| Varargs sammeln | local args = {...} |
| Methode (Doppelpunkt-Syntax) | function obj:greet() ... end |
String-Bibliothek
Gängige Funktionen aus der String-Bibliothek (aufrufbar als s:fn()).
| Funktion | Was sie macht |
|---|---|
string.len(s) | Länge des Strings |
string.sub(s, i, j) | Teilstring von Index i bis j |
string.upper(s) | Kopie in Großbuchstaben |
string.rep(s, n) | Wiederholt den String n-mal |
string.find(s, p) | Findet ein Muster, gibt Anfang/Ende zurück |
string.match(s, p) | Gibt den ersten Mustertreffer zurück |
string.gsub(s, p, r) | Ersetzt alle Mustertreffer |
string.format(fmt, ...) | Formatiert Werte zu einem String |
Table- & Math-Bibliotheken
Helfer für die Arbeit mit Tables im Array-Stil und mit Zahlen.
| Funktion | Was sie macht |
|---|---|
table.insert(t, v) | Hängt einen Wert am Ende an |
table.insert(t, i, v) | Fügt v an Position i ein |
table.remove(t, i) | Entfernt das Element an i und gibt es zurück |
table.concat(t, ", ") | Fügt Elemente zu einem String zusammen |
table.sort(t) | Sortiert das Array an Ort und Stelle |
math.floor(x) / math.ceil(x) | Ab- / aufrunden |
math.max(...) / math.min(...) | Größtes / kleinstes Argument |
math.random(1, 6) | Zufällige Ganzzahl in einem Bereich |
Metatables (kurz)
Metatables erlauben dir, das Verhalten von Tables anzupassen - Operatoren, Indizierung und mehr.
| Operation | Syntax |
|---|---|
| Eine Metatable setzen | setmetatable(t, mt) |
| Eine Metatable holen | getmetatable(t) |
| Ausweich für fehlende Schlüssel | mt.__index = defaults |
| Standard über eine Funktion | mt.__index = function(t, k) ... end |
| Addition anpassen | mt.__add = function(a, b) ... end |
| tostring anpassen | mt.__tostring = function(t) ... end |
| Prototyp-basierte OOP | mt.__index = ClassTable |
Die Lua-Syntax, die du am häufigsten brauchst, auf einer Seite. Dieser Lua-Spickzettel ist eine Schnellreferenz für die Kernsprache - Variablen und Typen, Strings, Kontrollfluss, Funktionen sowie die Tables, die Luas einzige, flexible Datenstruktur bilden, plus ein Blick auf die Standardbibliotheken und Metatables.
Alles hier ist Standard-Lua und läuft auf einem unveränderten Interpreter. Kopiere, was du brauchst, oder probiere jeden Codeschnipsel live im Lua-Playground aus - keine Installation nötig.
Lua-Spickzettel FAQ
Ist dieser Lua-Spickzettel kostenlos?
Ja. Dieser Lua-Spickzettel ist völlig kostenlos, ohne erforderliche Anmeldung. Setze ein Lesezeichen und komm jederzeit wieder, wenn du eine Table-Operation, eine String-Funktion oder ein Kontrollfluss-Schlüsselwort nachschlagen möchtest.
Wie kann eine Lua-Table sowohl ein Array als auch eine Map sein?
{10, 20, 30}), verhält sich die Table wie ein Array; wenn du String-Schlüssel verwendest ({name = "Ada"}), verhält sie sich wie eine Map. Du kannst in derselben Table sogar beides mischen. Deshalb braucht Lua nur einen strukturierten Typ - die Table deckt Arrays, Dictionaries, Sets und Objekte ab.Warum verwendet Lua 1-basierte Indizierung?
t[1] das erste Element und #t die Anzahl. Der Längenoperator # und Bibliotheksfunktionen wie table.insert und ipairs setzen alle diese 1-basierte Konvention voraus, sodass das Festhalten daran deinen Array-Code wie erwartet funktionieren lässt.Kann ich Lua online üben?
Ja. Öffne den Lua-Playground, um jeden Codeschnipsel aus diesem Spickzettel in deinem Browser auszuführen - keine Lua-Installation nötig. Wenn du Struktur möchtest, führt dich Coddys kostenloser interaktiver Lua-Kurs Schritt für Schritt von Variablen und Tables zu Funktionen und Metatables.
Ist dieser Spickzettel für Anfänger geeignet?
Ja. Er ist von den häufigsten Themen (Variablen, Strings, Tables, Kontrollfluss) hin zu den fortgeschrittenen (die Standardbibliotheken und Metatables) gegliedert, sodass du die oberen Abschnitte schon am ersten Tag nutzen und in den Rest hineinwachsen kannst.