Learn in 10 minutes

Learn in 10 minutes

Lerne Lua in 10 Minuten

Ich bin Lua - eine superleichte Programmiersprache, perfekt zum Einbetten in andere Anwendungen. Wusstest du, dass ich in Spielen wie ‘World of Warcraft’ und Roblox verwendet werde? Ich bin auch beliebt für Konfigurationsskripte!

1. Dein erstes Lua-Programm

Lass uns mit den Grundlagen beginnen. Erstelle eine Datei hello.lua und schreibe:

print("Hello, World!")

Speichere und führe im Terminal aus:

lua hello.lua

Du wirst sehen:

Hello, World!

Siehst du, wie einfach das ist! print() zeigt Text auf dem Bildschirm an.

2. Grundlegende Syntax

Meine Syntax ist super einfach:

-- Das ist ein einzeiliger Kommentar
print("Hallo Welt!")

--[[
Das ist ein mehrzeiliger
Kommentar
]]

Wichtige Punkte:

  • Kommentare: Eine Zeile --, mehrere --[[ ]]
  • Anweisungen: Eine pro Zeile, kein Semikolon nötig
  • Groß-/Kleinschreibung: Ich unterscheide Groß- und Kleinschreibung
  • Leerzeichen: Leerzeichen und Zeilenumbrüche sind egal

3. Variablen und Datentypen

Ich bin dynamisch typisiert, keine Typdeklaration nötig:

-- Direkte Zuweisung
name = "Lua"
alter = 25
toll = true
pi = 3.14159

-- Mehrfachzuweisung
x, y, z = 10, 20, 30

-- Leerer Wert ist nil
leer = nil

print("Name:", name)
print("Alter:", alter)
print("Toll?:", toll)

Meine Datentypen:

  • nil: Kein Wert
  • boolean: true oder false
  • number: Zahlen (ganze und dezimale)
  • string: Text
  • table: Meine universelle Datenstruktur
  • function: Funktionen (First-Class Citizens)
  • userdata: Für C
  • thread: Coroutinen

4. String-Manipulation

-- Strings erstellen
str1 = "Hallo"
str2 = 'Welt'
str3 = [[Mehrzeiliger
Text einfach]]

-- Verketten mit ..
nachricht = str1 .. " " .. str2
print(nachricht)  -- Ausgabe: Hallo Welt

-- Länge mit #
laenge = #"Hallo"
print(laenge)   -- Ausgabe: 5

-- String-Methoden
text = "hello world"
gross = text:upper()
klein = text:lower() 
teil = text:sub(1, 5)

print(gross)    -- Ausgabe: HELLO WORLD
print(teil)      -- Ausgabe: hello

5. Tabellen - Mein universeller Container

Tabellen sind meine beste Funktion:

-- Als Array (Indizes ab 1)
fruchte = {"Apfel", "Banane", "Kirsche"}
print(fruchte[1])  -- Ausgabe: Apfel
print(fruchte[2])  -- Ausgabe: Banane

-- Als Dictionary
person = {
    name = "Max",
    alter = 30,
    stadt = "Berlin"
}
print(person.name)    -- Ausgabe: Max
print(person["alter"])  -- Ausgabe: 30

-- Gemischt geht auch
gemischteTabelle = {
    "Apfel",
    "Banane", 
    farbe = "rot",
    anzahl = 5
}

-- Tabellenoperationen
fruchte = {"Apfel", "Banane"}
table.insert(fruchte, "Kirsche")  -- Am Ende hinzufügen
table.insert(fruchte, 2, "Orange") -- An Position einfügen

print(table.concat(fruchte, ", "))  -- Ausgabe: Apfel, Orange, Banane, Kirsche

6. Kontrollstrukturen

-- If
alter = 18

if alter >= 18 then
    print("Du bist erwachsen")
elseif alter >= 13 then
    print("Du bist Teenager")
else
    print("Du bist Kind")
end

-- While
zaehler = 1
while zaehler <= 5 do
    print("Zähler:", zaehler)
    zaehler = zaehler + 1
end

-- For numerisch
for i = 1, 5 do
    print("Zahl:", i)
end

-- For mit Schritt
for i = 10, 1, -2 do
    print("Countdown:", i)
end

-- For für Tabellen
fruchte = {"Apfel", "Banane", "Kirsche"}
for index, frucht in ipairs(fruchte) do
    print(index, frucht)
end

person = {name = "Max", alter = 30}
for schluessel, wert in pairs(person) do
    print(schluessel, wert)
end

7. Funktionen

-- Grundlegende Funktion
function begruessen(name)
    return "Hallo, " .. name .. "!"
end

nachricht = begruessen("Anna")
print(nachricht)  -- Ausgabe: Hallo, Anna!

-- Mehrere Rückgabewerte
function berechnen(a, b)
    return a + b, a - b, a * b, a / b
end

summe, differenz, produkt, quotient = berechnen(10, 5)
print("Summe:", summe)        -- Ausgabe: Summe: 15
print("Differenz:", differenz) -- Ausgabe: Differenz: 5

-- Anonyme Funktion (Lambda)
multiplizieren = function(x, y)
    return x * y
end

ergebnis = multiplizieren(4, 5)
print(ergebnis)  -- Ausgabe: 20

-- Funktionen als Parameter
function operationAusfuehren(x, y, operation)
    return operation(x, y)
end

ergebnis = operationAusfuehren(6, 7, multiplizieren)
print(ergebnis)  -- Ausgabe: 42

8. Module

Organisiere Code in Modulen. Erstelle mathematik.lua:

-- mathematik.lua
local Mathematik = {}

function Mathematik.addieren(a, b)
    return a + b
end

function Mathematik.multiplizieren(a, b)
    return a * b
end

return Mathematik

Verwende in der Hauptdatei:

-- haupt.lua
local mathematik = require("mathematik")

ergebnis = mathematik.addieren(10, 5)
print("Additionsergebnis:", ergebnis)  -- Ausgabe: Additionsergebnis: 15

ergebnis = mathematik.multiplizieren(4, 6)
print("Multiplikationsergebnis:", ergebnis)  -- Ausgabe: Multiplikationsergebnis: 24

9. Fehlerbehandlung

-- Fehler abfangen mit pcall
function gefaehrlicheOperation()
    error("Etwas ist schiefgelaufen!")
end

-- pcall ruft geschützt auf
erfolg, ergebnis = pcall(gefaehrlicheOperation)

if erfolg then
    print("Erfolg:", ergebnis)
else
    print("Fehlschlag:", ergebnis)
end

-- Benutzerdefinierte Fehler
function dividieren(a, b)
    if b == 0 then
        error("Division durch Null nicht erlaubt")
    end
    return a / b
end

erfolg, ergebnis = pcall(dividieren, 10, 0)
if not erfolg then
    print("Fehler:", ergebnis)
end

10. Praktische Beispiele

-- Einfacher Taschenrechner
function taschenrechner()
    print("🐮 Einfacher Taschenrechner")
    print("1. Addition")
    print("2. Subtraktion") 
    print("3. Multiplikation")
    print("4. Division")
    
    wahl = tonumber(io.read())
    print("Erste Zahl:")
    zahl1 = tonumber(io.read())
    print("Zweite Zahl:")
    zahl2 = tonumber(io.read())
    
    if wahl == 1 then
        ergebnis = zahl1 + zahl2
        print("Ergebnis:", ergebnis)
    elseif wahl == 2 then
        ergebnis = zahl1 - zahl2
        print("Ergebnis:", ergebnis)
    elseif wahl == 3 then
        ergebnis = zahl1 * zahl2
        print("Ergebnis:", ergebnis)
    elseif wahl == 4 then
        if zahl2 ~= 0 then
            ergebnis = zahl1 / zahl2
            print("Ergebnis:", ergebnis)
        else
            print("❌ Division durch Null")
        end
    else
        print("🤔 Ungültige Wahl")
    end
end

-- Zum Verwenden, Kommentar entfernen
-- taschenrechner()

-- Dateioperationen
function dateiLesen(dateiname)
    local datei = io.open(dateiname, "r")
    if not datei then
        return nil, "Datei konnte nicht geöffnet werden"
    end
    
    local inhalt = datei:read("*a")
    datei:close()
    return inhalt
end

inhalt, fehler = dateiLesen("beispiel.txt")
if inhalt then
    print("Dateiinhalt:", inhalt)
else
    print("Fehler:", fehler)
end

Fazit

Ich Lua bin fantastisch! Perfekt für:

  • 🎮 Spielescripting (viele Spiele nutzen mich)
  • 🔧 Embedded-Entwicklung (wegen meiner Leichtigkeit)
  • ⚙️ Konfigurationsdateien und Automatisierung
  • 🚀 Hochleistungsszenarien (mit LuaJIT)

Das Beste an mir:

  • Superleicht: Brauche wenig Speicherplatz
  • Schnell: LuaJIT ist ultraschnell
  • Flexibel: Dynamische Typisierung + universelle Tabellen
  • Portabel: Lauf auf Mobilgeräten und Servern
  • Einfach einzubetten: Verstehe mich gut mit C/C++

Willst du mehr lernen? Versuche:

  • Lua-Standardbibliothek
  • Coroutinen (nebenläufige Programmierung)
  • Metatabellen und Metamethoden (für OOP)
  • Lua-C-API
  • Love2D für Spieleentwicklung

Ich Lua bin einfach zu lernen und sehr mächtig! 🚀