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
