scripting:tutorials:level1:variable_scope
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
scripting:tutorials:level1:variable_scope [2023/05/22 15:18] – angelegt fritz_98 | scripting:tutorials:level1:variable_scope [2024/05/13 13:11] (aktuell) – fritz_98 | ||
---|---|---|---|
Zeile 37: | Zeile 37: | ||
-- Bis hier her ist " | -- Bis hier her ist " | ||
- | -- Bit folgendem Aufruf allerdings verändert sich der " | + | -- Mit folgendem Aufruf allerdings verändert sich der " |
-- Funktion nicht ersichtlich, | -- Funktion nicht ersichtlich, | ||
DifficultyString = GetDifficultyString(2) | DifficultyString = GetDifficultyString(2) | ||
Zeile 69: | Zeile 69: | ||
[[ https:// | [[ https:// | ||
- | Um dabei bei der Ausgabe ein Ergebnis zu sehen, kann man '' | + | Um dabei bei der Ausgabe ein Ergebnis zu sehen, kann man die Funktion |
<code lua> | <code lua> | ||
print(Information) | print(Information) | ||
Zeile 78: | Zeile 78: | ||
===== Blöcke ===== | ===== Blöcke ===== | ||
+ | |||
+ | Ein Block sind eine oder mehrere zusammengehörige Instruktionen. " | ||
+ | |||
+ | <code lua> | ||
+ | if Text == " | ||
+ | -- Anfang Block 1 | ||
+ | print(Text) | ||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | -- Ende Block 1 | ||
+ | elseif Text == "nu mă" then | ||
+ | -- Anfang Block 2 | ||
+ | print(Text) | ||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | -- Ende Block 2 | ||
+ | end | ||
+ | -- Der Befehl print hat in Siedler 5 keine Funktion | ||
+ | -- Der Code muss also in der lua demo, die oben verlinkt ist, ausgeführt werden | ||
+ | -- Alternativ können alle print-Aufrufe auch durch Message ersetzt werden. Dann wird Text im Spiel angezeigt | ||
+ | </ | ||
+ | |||
+ | Blöcke können Problemlos auch ineinander geschachtelt werden, wie die Minimumssuche [[ scripting: | ||
+ | |||
+ | Im Allgemeinen ist ein Block immer zwischen einem Schlüsselwort wie '' | ||
+ | |||
+ | <code lua> | ||
+ | function DragosteaDinTei(_Text) | ||
+ | -- Anfang äußerer Block | ||
+ | if _Text == " | ||
+ | -- Anfang innerer Block 1 | ||
+ | print(_Text) | ||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | -- Ende innerer Block 1 | ||
+ | elseif _Text == "nu mă" then | ||
+ | -- Anfang innerer Block 2 | ||
+ | print(_Text) | ||
+ | print(" | ||
+ | print(" | ||
+ | print(" | ||
+ | -- Ende innerer Block 2 | ||
+ | end | ||
+ | -- Ende äußerer Block | ||
+ | end | ||
+ | </ | ||
---- | ---- | ||
===== Lokale Variablen ===== | ===== Lokale Variablen ===== | ||
+ | |||
+ | In lokalen Variablen können Zwischenergebnisse und andere Daten, die später verworfen werden sollen, gespeichert werden. Eine lokale Variable wird mit dem vorangehenden Schlüsselwort '' | ||
+ | <code lua> | ||
+ | local Result = 42 | ||
+ | </ | ||
+ | |||
+ | Eine lokale Variable ist nur im gleichen Block gültig, in dem sie definiert wurde. Dies schließt alle darin eingeschlossenen Unterblöcke mit ein. | ||
+ | |||
+ | <code lua> | ||
+ | function TestScope() | ||
+ | local Variable = 5 | ||
+ | print(Variable) | ||
+ | if Variable == 5 then | ||
+ | Variable = 42 | ||
+ | end | ||
+ | print(Variable) | ||
+ | end | ||
+ | |||
+ | TestScope() -- zeigt zuerst 5, dann 42 an | ||
+ | </ | ||
+ | |||
+ | **Achtung**: | ||
+ | <code lua> | ||
+ | function TestScope() | ||
+ | local Variable = 5 | ||
+ | if Variable == 5 then | ||
+ | local Variable = 42 | ||
+ | print(Variable) -- hier wird wie erwartet 42 angezeigt | ||
+ | end | ||
+ | print(Variable) | ||
+ | -- hier wird 5 angezeigt, da die lokale Variable aus dem if-Block nicht mehr existiert | ||
+ | -- (if-Block ist zuende) | ||
+ | end | ||
+ | |||
+ | TestScope() -- zeigt zuerst 42, dann 5 an | ||
+ | </ | ||
+ | |||
+ | **Achtung**: | ||
+ | <code lua> | ||
+ | function TestScope() | ||
+ | -- mit ' | ||
+ | do | ||
+ | local Variable = 5 | ||
+ | end | ||
+ | print(Variable) | ||
+ | end | ||
+ | |||
+ | TestScope() --zeigt ' | ||
+ | </ | ||
+ | In diesem Beispiel wird nicht 5, sondern '' | ||
+ | |||
+ | Anderes Beispiel: | ||
+ | <code lua> | ||
+ | function TestScope() | ||
+ | do | ||
+ | local Variable = 5 | ||
+ | end | ||
+ | Variable = 42 | ||
+ | print(Variable) | ||
+ | end | ||
+ | |||
+ | TestScope() -- zeigt 42 an. Allerdings wurde eine globale Variable erschaffen/ | ||
+ | </ | ||
+ | Hier wird zwar die erwartete 42 ausgegeben, allerdings wurde eine **globale** Variable erschaffen. Da wie im vorigen Beispiel die lokale Variable unterhalb von '' | ||
+ | |||
+ | Um diesen Abschnitt abzuschließen, | ||
+ | <code lua> | ||
+ | function GetDifficultyString(_Difficulty) | ||
+ | local Information = "Du hast die " | ||
+ | if _Difficulty == 1 then | ||
+ | Information = Information.." | ||
+ | elseif _Difficulty == 2 then | ||
+ | Information = Information.." | ||
+ | elseif _Difficulty == 3 then | ||
+ | Information = Information.." | ||
+ | end | ||
+ | Information = Information.." | ||
+ | return Information | ||
+ | end | ||
+ | </ | ||
+ | |||
+ | Dies wird mit keiner globalen Variable mehr kollidieren. Lokale Variablen haben in dem Block, in dem sie definiert wurden, immer " | ||
+ | <code lua> | ||
+ | DifficultyString = GetDifficultyString(2) | ||
+ | </ | ||
+ | |||
+ | Es ist sehr sinnvoll, sich die Zeit zu nehmen, zu überlegen, wo genau in diesem Beispiel welche Variablen existieren. | ||
---- | ---- | ||
Zeile 87: | Zeile 223: | ||
===== Verwendungszwecke ===== | ===== Verwendungszwecke ===== | ||
- | TODO: Beispielhaft Use Cases für lokale und globale Variablen | + | Zum Schluss wollen wir noch einige Beispiele geben, |
- | TODO: Funktionen sind normalerweise | + | |
- | TODO: Parameter | + | ^ Verwendungszweck ^ Global oder lokal? ^ |
+ | | Zähle die Anzahl | ||
+ | | Zwischenergebnisse | ||
+ | | Funktionen | Funktionen sind in der Regel immer global | ||
+ | | Parameter | ||
+ | |||
+ | ---- | ||
+ | |||
+ | Um mit wenig Schreibarbeit große Rechenvorschriften aufzuschreiben, | ||
+ | [[ scripting: | ||
+ | [[ scripting: | ||
+ | [[ scripting: |
scripting/tutorials/level1/variable_scope.1684768733.txt.gz · Zuletzt geändert: 2023/05/22 15:18 von fritz_98