Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripting:tutorials:level2:functions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
Nächste ÜberarbeitungBeide Seiten, nächste Überarbeitung
scripting:tutorials:level2:functions [2023/09/09 13:19] fritz_98scripting:tutorials:level2:functions [2023/09/09 17:01] fritz_98
Zeile 24: Zeile 24:
 Es handelt sich dabei nur um eine alternative Schreibweise, die Funktionalität bleibt die gleiche. Es handelt sich dabei nur um eine alternative Schreibweise, die Funktionalität bleibt die gleiche.
  
-Das gleiche Prinzip funktioniert auch, wenn ein Table als einziger Parameter erwartet wird. Wir definieren eine Funktion, die eine Person etwas sagen lässt:+Das gleiche Prinzip funktioniert auch, wenn ein Table als einziger Parameter erwartet wird. Wir definieren eine Funktion, die eine Person etwas sagen lässt und belassen es Optional, ob der Sprecher oder die Aussage angegeben werden. Dazu benutzen wir ein Table als Paramter und wenden einen kleinen Trick anUm herauszufinden, welche Informationen gegeben wurden, fragen wir (indirekt), ob sie **nil** sind. In Lua ist jede Variable, bevor sie definiert wird, **nil**. Demzufolge sind alle undefinierten Variablen **nil**.
 <code lua> <code lua>
 -- _WhoAndWhat ist ein Table, das eine Person und einen Text enthalten kann, aber nicht muss -- _WhoAndWhat ist ein Table, das eine Person und einen Text enthalten kann, aber nicht muss
Zeile 298: Zeile 298:
  
 =====Beliebig viele Parameter===== =====Beliebig viele Parameter=====
 +
 +In manchen Situationen ist es nützlich, eine Funktion mit beliebig vielen Parametern aufrufen zu können. Die Funktion soll dann einfach mit allen Parametern, die sie bekommt, arbeiten.
 +
 +Ein Beispiel dafür kann eine Funktion sein, die aus allen Zahlen, die sie als Argumente erhält, eine Summe bildet. Auf herkömmlichem Weg kann man nur eine endliche Menge an Parametern definieren, die jederzeit überschritten werden kann. Zwangsläufig muss der Weg über Tables führen, die beliebig groß sein können:
 +<code lua>
 +function Sum(_Numbers)
 +    local Result = 0
 +    for _, Number in ipairs(_Numbers) do
 +        Result = Result + Number
 +    end
 +    return Result
 +end
 +
 +print(Sum{3, 25, 14, 9, 11, 17, 36})
 +</code>
 +
 +Es gibt in Lua aber auch eine Schreibweise, die automatisch alle Argumente, die der Funktion übergeben werden, in ein Table gibt. Dazu schreibt man statt dem Argument drei Punkte (''...''). Alle an diesem Platzhalter gegebenen Argumente sind innerhalb der Funktion in einem Table namens ''arg'' verfügbar:
 +<code lua>
 +function Sum(...)
 +    for _, Number in ipairs(arg) do
 +        Result = Result + Number
 +    end
 +    return Result
 +end
 +
 +-- Beachte den Unterschied zu oben: Hier wird kein Table als Argument überreicht, sondern einfach alle Zahlen
 +-- hintereinander!
 +print(Sum(3, 25, 14, 9, 11, 17, 36))
 +</code>
 +**Hinweis**: In der Lua-Demo muss ''arg'' durch ''{...}'' getauscht werden, da Siedler noch mit einer alten Lua-Version läuft.
 +
 +Das lässt sich auch mit festen Parametern kombinieren. In der folgenden Beispielfunktion wollen wir in ein bestehendes Table alle angegebenen Werte einfügen:
 +<code lua>
 +MyTable = {3, 25, 14}
 +
 +function MultiInsert(_Table, ...)
 +    for _, Value in ipairs(arg) do
 +        table.insert(_Table, Value)
 +    end
 +end
 +
 +MultiInsert(MyTable, 7, "t", 0, "Spinat", 9999)
 +</code>
 +Nach dem Aufruf hat ''MyTable'' 8 Einträge, wurde also um alle Werte, die der Funktion übergeben wurden, erweitert.
 +
 +----
 +
 +Im nächsten Kapitel bleiben wir bei Funktionen und versuchen, mit Rekursionen zu arbeiten.
 +
 +[[ scripting:tutorials:level2:loops| Voriges Kapitel: Weiteres zu Schleifen ]] \\
 +[[ scripting:tutorials:level2:recursion | Nächstes Kapitel: Rekursionen ]] \\
 +[[ scripting:tutorials:level2:functions | Zurück nach oben ]]
scripting/tutorials/level2/functions.txt · Zuletzt geändert: 2024/05/17 10:02 von fritz_98