Benutzer-Werkzeuge

Webseiten-Werkzeuge


lua

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
lua [2024/04/20 22:28]
root [Variablen]
lua [2024/05/26 17:30] (aktuell)
root [Funktionen]
Zeile 2: Zeile 2:
 Ende von Statements/Instruktionen wird automatisch erkannt, es können also mehrere auf einer Zeile stehen ohne Trennzeichen oder Zeilenumbruch. Ende von Statements/Instruktionen wird automatisch erkannt, es können also mehrere auf einer Zeile stehen ohne Trennzeichen oder Zeilenumbruch.
  
 +
 +===== Allgemein =====
 +
 +  * am Verbeitetsten ist Lua 5.1
 +  * alle Versionen nach 5.1 -> 5.2, 5.3, 5.4 sind jeweils nicht abwärtskompatibel 
 +      * z.B erzeugt ... in einer Funktionsdeklaration in 5.1 eine Tabelle arg, in 5.4 mus ... an eine Tabelle übergeben werden um eine Tabelle zu bekommen
 +      * in 5.1 gibt es eine Funktion unpack zum entpacken von Tabellen, in 5.4 ist unpack eine Methode von table -> table.unpack()
 +
 +
 +  * Einführung: https://www.lua.org/pil/5.3.html
  
 ====== Keywords/Onboard-Funktionen ====== ====== Keywords/Onboard-Funktionen ======
Zeile 248: Zeile 258:
  
 ".." ist der Verkettungsoperator ".." ist der Verkettungsoperator
 +
 +
 +
 +===== if-then-elif-else =====
 +
 +<sxh lua>
 +if a > b then
 +    print("A is bigger than B")
 +elif a < b then
 +    print("A is smaller than B)
 +else
 +    print("A is equal to B or something else ;)")
 +end
 +</sxh>
 +
 +
 +
 +===== while =====
 +
 +<sxh lua>
 +i=0
 +while i<5 do
 +    print(i)
 +    i = i + 1
 +end
 +</sxh>
 +
 +
 +===== repeat-until =====
 +
 +<sxh lua>
 +i=0
 +repeat
 +    print(i)
 +    i = i + 1
 +until 
 +</sxh>
 +
 +
 +===== numerische for-Schleife =====
 +
 +
 +<sxh lua>
 +for i=0, 5, 1 do
 +    print(i)
 +end
 +</sxh>
 +
 +Führt die Schleife beginnend bei 0 bis 5 in Schritten von 1 aus.
 +
 +Abstrakt sieht es so aus:
 +
 +<sxh lua>
 +for Variable=Startwert, Stop-Wert, Schritt-Länge do
 +   Code
 +end
 +</sxh>
 +
 +  * Startwert = erster Wert mit dem die Schleife durchlaufen wird
 +  * Stop-Wert = der letzte Wert mit dem die Schleife durchlaufen wird
 +  * Schritt-Länge = Um wie viel die Variable bei jedem Schleifendurchlauf erhöht (oder wenn es eine negative Zahl ist) reduziert wird
 +      * dieser Parameter kann weggelassen werden, dann wird 1 angenommen
 +  * die loop-Variable kann innerhalb der Schleife nicht geändert werden (ähnlich Python) und ist automatisch eine lokale Variable (existiert nur innerhalb der Schleife)
 +
 +
 +===== Generische for-Schleife ===== 
 +
 +  * bezieht Werte aus einem Iterator
 +
 +<sxh lua>
 +a = {"a","b","c","d"}
 +for i, v in ipairs(a) do
 +    print(v)
 +end
 +</sxh>
 +
 +  * i bekommt den Index übergeben
 +  * v den Wert
 +  * ipairs ist der Iterator
 +  * a ist die Tabelle über die iteriert wird
 +
 +
 +Abstrakt:
 +<sxh lua>
 +for Variablen in Iteratoren do
 +    Code
 +end
 +</sxh>
 +
 +  * Variablen sind die Variablen die bei jedem Durchlauf der Schleife aus dem Iterator besetzt werden
 +  * Iterator ist ein Iterator der bei jedem Schleifendurchlauf einen neuen Wert (oder mehrere) zurückgibt
 +
 +
 +===== break =====
 +
 +  * Bricht aus einer Schleife aus
 +
 +
 +===== return =====
 +
 +  * Bricht aus einer Funktion aus
 +  * gibt am Ende einer Funktion Werte an den Aufrufer zurück
 +      * sollen am Ende einer Funktion keine Werte zurückgeben werden braucht kein return angegeben werden
 +
 +
 +===== Funktionen =====
 +
 +  * Keyword function
 +  * Parameter sind lokale Variablen
 +  * Parameter die beim Aufruf nicht übergeben werden, bekommen nil als Wert
 +  * Parameter die zu viel übergeben werden werden ohne Fehler verworfen
 +  * Funktionen sind First-Class-Values
 +      * sie können also wie strings, int usw. Variablen zugewiesen werden
 +          * technisch gesehen function <Name> weißt den Code der Variable <Name> zu
 +  * Funktionen müssen mit Funktionsname() aufgerufen werden
 +      * die Klammern müssen also zwingend angegeben werden
 +      * Ausnahme es gibt nur einen Parameter der ein literal String ist oder eine table
 +
 +<sxh lua>
 +function myfunction(param1, param2)
 +      somecode
 +end
 +
 +myfunction("a")
 +</sxh>
 +
 +
 +  * param2 wurde in obigem Beispiel beim Aufruf der Funktion nicht übergeben und hätte in der Funktion den Wert nil
 +
 +
 +**Rückgabewerte**
 +
 +  * Funktionen können mehr als 1 Return-Value haben
 +  * sind mehr Variablen als Rückgabewerte vorhanden, wird mit nil aufgefüllt
 +  * Default-Rückgabewert = nil
 +
 +<sxh lua>
 +function somefunction()
 +    return "return1", "return2"
 +end
 +
 +somefunction()
 +a = somefunction()
 +b, c = somefunction()
 +d, e, f = somefunction()
 +</sxh>
 +
 +
 +
 +**Variable Anzahl Paramater**
 +
 +  * per "..." kann angegeben werden das eine unbestimmte Menge Parameter übergeben werden kann
 +      * entspricht Pythons *args
 +  * die Werte befinden sich anschließend in der Tabelle arg
 +
 +<sxh lua>
 +function my(param1, ...)
 +    print(param1)
 +    print(unpack(arg))
 +end
 +
 +my(1,2,3,4,5)
 +</sxh>
 +
 +  * gibt 1 und auf einer neuen Zeile 2,3,4.5 aus
 +  * unpack entpackt eine Tabelle (wie * in Python)
 +  * arg ist die Tabelle die die zusätzlichen Parameter enthält
 +
 +
 +** Named Arguments: **
 +
 +  * gibt es nicht
 +  * kann durch tables (man übergibt eine Table) simuliert werden
 +
 +
 +** Anonyme Funktionen/Lambda **
 +
 +  * man kann einfach keinen Namen angeben
 +  * der Name nach "function" ist nur die Zuweisung an eine Variable
 +
 +
 +<sxh lua>
 +function dosomething(f, parameter)
 +    f(parameter)
 +end
 +
 +dosomething(function (string) print(string) end, "hello")
 +</sxh>
 +
 +  * dosomething erwartet in diesem Beispiel als ersten Parameter f und als zweiten Parameter einen Parameter den es der Funktion übergibt
 +  * 'function (string) print(string) end' übergibt eine anonyme Funktion (ohne Namen) beim Funktionsaufruf
 +  * letztendlich wird die anonyme Funktion aufgerufen und gibt "hello" zurück
 +
 +
 +===== Closure =====
 +
 +  * Funktionen in anderen Funktionen haben Zugriff auf die Variablen der sie umgebenden Funktion
 +  * der Zugriff und die Werte bleiben bestehen, auch wenn der Scope der sie umgebenden Funktion nicht mehr existiert
 +      * im Prinzip bekommt die Unterfunktion eine Kopie der Variablen der sie umgebenden Funkion
 +      * im Prinzip kann man es vergleichen mit einem Objekt, dessen Methode Zugang zu den Funktionen eben des Objektes hat
 +
 +
 +<sxh lua>
 +function outer(base)
 +    local result = base * 5
 +    inner = function()
 +        print(result)
 +        end
 +    return inner
 +end
 +
 +bla = outer(6)
 +bla()
 +</sxh>
 +
 +  * gibt 30 aus
 +  * inner wird zurückgegeben, hat aber (noch) Zugriff auf die Variablen seiner (nicht mehr existierenden) Eltern-Funktion outer
 ====== Begriffe/Konzepte ====== ====== Begriffe/Konzepte ======
  
lua.1713644913.txt.gz · Zuletzt geändert: 2024/04/20 22:28 von root