Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
skript:funktionen [2015/08/18 22:16] 127.0.0.1 Externe Bearbeitung |
skript:funktionen [2017/01/09 15:22] (aktuell) milky-way [Parameter (Mehrzahl)] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | = Funktionen = | + | ====== Funktionen ====== |
- | :Funktionen im Skript werden dazu benutzt um Abläufe zu automatisieren und eure Geschichte im Spiel zu gestalten. | + | Funktionen im Skript werden dazu benutzt um Abläufe zu automatisieren und eure Geschichte im Spiel zu gestalten. |
- | :Sie können //Parameter// und einen //Rückgabewert// haben. Einfache Funktionen lassen sich betrachten wie ein Todo-Zettel mit Aufgaben, die noch zu erledigen sind. | + | Sie können //Parameter// und einen //Rückgabewert// haben. Einfache Funktionen lassen sich betrachten wie ein Todo-Zettel mit Aufgaben, die noch zu erledigen sind. |
- | :Wenn der Zettel einmal aufgeschrieben wurde, kann er immer wieder abgearbeitet werden, indem sein [[Skript:Bezeichner|Name]] aufgerufen wird. | + | Wenn der Zettel einmal aufgeschrieben wurde, kann er immer wieder abgearbeitet werden, indem sein [[Skript:Bezeichner|Name]] aufgerufen wird. |
- | == Definition == | + | ===== Definition ===== |
- | <html> | + | <code>func typ Name ( |
- | <head> | + | //hier, zwei Parameter. Bei einer Parameteranzahl zwischen 0 und 8 gibt es keine Probleme |
- | <title>Exported from Notepad++</title> | + | var typ ParameterA, |
- | <style type="text/css"> | + | var KLASSEN_TYP ParameterB |
- | span { | + | ) { |
- | font-family: 'Courier New'; | + | //TODO Liste, der Aufgabenzettel für die Engine |
- | font-size: 12pt; | + | //Variablenzuweisung |
- | color: #CCCCCC; | + | Questvariable = Konstante; |
- | } | + | |
- | .sc0 { | + | //Eigenschaftenzuweisung |
- | } | + | ParameterB.eigenschaft[ParameterA] = Andere_Konstante; |
- | .sc2 { | + | |
- | font-style: italic; | + | //Der Rückgabewert |
- | color: #999999; | + | return Wert_Vom_Typ_typ; |
- | } | + | };</code> |
- | .sc4 { | + | |
- | color: #CC9900; | + | |
- | } | + | |
- | .sc5 { | + | |
- | font-weight: bold; | + | |
- | color: #CC9900; | + | |
- | } | + | |
- | .sc10 { | + | |
- | font-weight: bold; | + | |
- | color: #0099CC; | + | |
- | } | + | |
- | .sc11 { | + | |
- | } | + | |
- | .sc12 { | + | |
- | font-weight: bold; | + | |
- | color: #999999; | + | |
- | } | + | |
- | .sc13 { | + | |
- | font-weight: bold; | + | |
- | color: #999999; | + | |
- | } | + | |
- | </style> | + | |
- | </head> | + | |
- | <body> | + | |
- | <center><div style="text-align: left; white-space: pre; line-height: 1; background: #333333; border:medium solid black; margin-right: 8px; margin-left: 8px; padding: 3px; "><span class="sc4">0001</span><span class="sc0"> </span><span class="sc5">func</span><span class="sc0"> </span><span class="sc11">typ</span><span class="sc0"> </span><span class="sc11">Name</span><span class="sc0"> </span><span class="sc10">(</span><span class="sc0"> | + | |
- | </span><span class="sc4">0002</span><span class="sc0"> </span><span class="sc2">//hier, zwei Parameter. Bei einer Parameteranzahl zwischen 0 und 8 gibt es keine Probleme</span><span class="sc0"> | + | |
- | </span><span class="sc4">0003</span><span class="sc0"> </span><span class="sc5">var</span><span class="sc0"> </span><span class="sc11">typ</span><span class="sc0"> </span><span class="sc11">ParameterA</span><span class="sc10">,</span><span class="sc0"> | + | |
- | </span><span class="sc4">0004</span><span class="sc0"> </span><span class="sc5">var</span><span class="sc0"> </span><span class="sc11">KLASSEN_TYP</span><span class="sc0"> </span><span class="sc11">ParameterB</span><span class="sc0"> | + | |
- | </span><span class="sc4">0005</span><span class="sc0"> </span><span class="sc10">)</span><span class="sc0"> </span><span class="sc12">{</span><span class="sc0"> | + | |
- | </span><span class="sc4">0006</span><span class="sc0"> </span><span class="sc2">//TODO Liste, der Aufgabenzettel für die Engine</span><span class="sc0"> | + | |
- | </span><span class="sc4">0007</span><span class="sc0"> </span><span class="sc2">//Variablenzuweisung</span><span class="sc0"> | + | |
- | </span><span class="sc4">0008</span><span class="sc0"> </span><span class="sc11">Questvariable</span><span class="sc0"> </span><span class="sc10">=</span><span class="sc0"> </span><span class="sc11">Konstante</span><span class="sc10">;</span><span class="sc0"> | + | |
- | </span><span class="sc4">0009</span><span class="sc0"> | + | |
- | </span><span class="sc4">0010</span><span class="sc0"> </span><span class="sc2">//Eigenschaftenzuweisung</span><span class="sc0"> | + | |
- | </span><span class="sc4">0011</span><span class="sc0"> </span><span class="sc11">ParameterB</span><span class="sc10">.</span><span class="sc11">eigenschaft</span><span class="sc10">[</span><span class="sc11">ParameterA</span><span class="sc10">]</span><span class="sc0"> </span><span class="sc10">=</span><span class="sc0"> </span><span class="sc11">Andere_Konstante</span><span class="sc10">;</span><span class="sc0"> | + | |
- | </span><span class="sc4">0012</span><span class="sc0"> | + | |
- | </span><span class="sc4">0013</span><span class="sc0"> </span><span class="sc2">//Der Rückgabewert</span><span class="sc0"> | + | |
- | </span><span class="sc4">0014</span><span class="sc0"> </span><span class="sc5">return</span><span class="sc0"> </span><span class="sc11">Wert_Vom_Typ_typ</span><span class="sc10">;</span><span class="sc0"> | + | |
- | </span><span class="sc4">0015</span><span class="sc0"> </span><span class="sc13">}</span><span class="sc10">;</span></div></center></body> | + | |
- | </html> | + | |
- | == Erklärung == | + | |
- | *hellgrau sind [[Skript:Bezeichner]]. | + | |
- | *gold und fett sind [[Skript:Daedalus|Schlüsselworte]] | + | |
- | *dunkelgrau und kursiv sind [[Skript:Daedalus|Kommentare]], die vom [[Skript:Parser]] ignoriert werden. | + | |
- | *alle übrigen sind [[Skript:Daedalus|Symbole]] bzw. [[Skript:Daedalus|Operatoren]] | + | |
- | ||typ||Bezeichnet einen Werttyp.||int, float, string, void (kein Rückgabewert), C_NPC, C_ITEM|| | + | ^Code ^Beschreibung ^Möglicher Wert^ |
- | ||KLASSEN_TYP||Bezeichnet einen Werttyp, der eine [[Skript:Klassen|Klasse]] ist.||C_NPC, C_ITEM, C_INFO|| | + | |typ|Bezeichnet einen Werttyp.|int, float, string, void (kein Rückgabewert), C_NPC, C_ITEM| |
- | ||Name||Bezeichnet die Funktion. Ihr Name muss neu sein.||FunktionA, ABC_Funktion, A_Funktion_001|| | + | |KLASSEN_TYP|Bezeichnet einen Werttyp, der eine [[Skript:Klassen|Klasse]] ist.|C_NPC, C_ITEM, C_INFO| |
- | ||ParameterA, ParameterB||Bezeichnen die Parameter einer Funktion.||siehe oben|| | + | |Name|Bezeichnet die Funktion. Ihr Name muss neu sein.|FunktionA, ABC_Funktion, A_Funktion_001| |
- | ||Questvariable||Bezeichnet eine globale Variable||siehe [[Skript:Variablen]]|| | + | |ParameterA, ParameterB|Bezeichnen die Parameter einer Funktion.|siehe oben| |
- | ||||Konstante, Andere_Konstante||siehe [[Skript:Konstanten]]|| | + | |Questvariable|Bezeichnet eine globale Variable|siehe [[Skript:Variablen]]| |
+ | |Konstante, Andere_Konstante|Bezeichnet zwei globale Konstanten|siehe [[Skript:Konstanten]]| | ||
- | :Welche Bedeutung die Anweisungen **Variablen**- bzw. **Eigenschaftenzuweisung** und **return** haben steht im Abschnitt [[Skript:Operatoren]]. | + | Welche Bedeutung die Anweisungen **Variablen**- bzw. **Eigenschaftenzuweisung** und **return** haben steht im Abschnitt [[Skript:Operatoren]]. |
- | ==== Parameter (Mehrzahl) ==== | + | |
- | :[[Skript:Funktionen|Zurück zum //Aufgabenzettel//]]. Es wurde gesagt, dass die Aufgabenzettel beliebig oft abgearbeitet werden können. Wenn allerdings sich das Abarbeiten nicht //irgendwie// verallgemeinern ließe, dann müssten wir sehr viele Zettel bzw. Funktionen schreiben. | + | |
- | :Jedoch, glücklicherweise lassen sie sich mittels Parameter verallgemeinern, d.h. ein Zettel kann für mehr als eine Situation [[Skript:Funktionen|aufgerufen]] werden. | + | |
- | :**Beispiel** | + | ===== Parameter (Mehrzahl) ===== |
- | :Deine Mutter schreibt **einen** Zettel __func void Kind_Kauft_bei_Aldi(Kind,Produkt,Anzahl) {}; __ um jedes ihrer Kinder, mit dem Einkauf bei Aldi Süd eines beliebigen Produktes in beliebiger Anzahl zu beauftragen. | + | [[Skript:Funktionen|Zurück zum Aufgabenzettel]]. Es wurde gesagt, dass die Aufgabenzettel beliebig oft abgearbeitet werden können. Wenn allerdings sich das Abarbeiten nicht //irgendwie// verallgemeinern ließe, dann müssten wir sehr viele Zettel bzw. Funktionen schreiben. |
- | :Noch allgemeiner formuliert lautete ihr Zettel __func void Kind_Kauft_bei(Kind,Produkt,Anzahl,Haendler) {}; __ | + | Jedoch, glücklicherweise lassen sie sich mittels Parameter verallgemeinern, d.h. ein Zettel kann für mehr als eine Situation [[Skript:Funktionen|aufgerufen]] werden. |
- | ==== Funktionsaufruf ==== | + | **Beispiel** |
- | :Jede Funktion kann aufgerufen werden. Das heißt, dass die Aufgaben auf dem Zettel abgearbeitet werden. | + | Deine Mutter schreibt **einen** Zettel ''func void Kind_Kauft_bei_Aldi(Kind,Produkt,Anzahl) {};'' um jedes ihrer Kinder, mit dem Einkauf bei Aldi Süd eines beliebigen Produktes in beliebiger Anzahl zu beauftragen. |
- | :Beim Aufruf schreibt man den Namen des Zettels bzw. der Funktion und in runden Klammern - mit oder ohne Leerzeichen - danach die zu //übergebenden// Parameter getrennt durch Kommata (Kommas). Der Zettel wird dann mit den übergebenen Parametern abgearbeitet. | + | Noch allgemeiner formuliert lautete ihr Zettel ''func void Kind_Kauft_bei(Kind,Produkt,Anzahl,Haendler) {};'' |
- | :**Beispiel (fortgesetzt)** | + | ===== Funktionsaufruf ===== |
- | :Deine Mutter schickt **dich** zum **Bioladen** um **zwölf** **Bioeier** zu kaufen. Dazu ruft sie //ihren// Zettel auf: __Kind_Kauft_Bei(Du,Bioeier,12,Bioladen);__ | + | Jede Funktion kann aufgerufen werden. Das heißt, dass die Aufgaben auf dem Zettel abgearbeitet werden. |
- | :Dabei ist natürlich wichtig, dass die Parameter in der richtigen Reihenfolge übergeben, d.h. aufgeschrieben werden. Außerdem müssem und können nur dann Parameter übergeben, wenn die [[Skript:Funktionen|Funktionsdefinition]] sie auch enthält und zwar **genau** so viele die Funktionsdefinition enthält und vom gleichen [[Skript:Daedalus|Typ]]! | + | Beim Aufruf schreibt man den Namen des Zettels bzw. der Funktion und in runden Klammern - mit oder ohne Leerzeichen - danach die zu //übergebenden// Parameter getrennt durch Kommata (Kommas). Der Zettel wird dann mit den übergebenen Parametern abgearbeitet. |
- | ==== Rückgabewert, englisch: return value ==== | + | **Beispiel (fortgesetzt)** |
- | :Manchmal möchte man eine //Antwort// über das //Ergebnis// der Funktion erhalten. Dazu muss in der Funktionsdefinition der Antworttyp, Ergebnistyp oder Rückgabetyp festgelegt werden. Zulässig sind alle [[Skript:Daedalus|Typen]] oder __void__, welches soviel bedeutet wie: kein Rückgabewert. | + | Deine Mutter schickt **dich** zum **Bioladen** um **zwölf** **Bio-Eier** zu kaufen. Dazu ruft sie //ihren// Zettel auf: ''Kind_Kauft_Bei(Du,Bioeier,12,Bioladen);'' |
+ | Dabei ist natürlich wichtig, dass die Parameter in der richtigen Reihenfolge übergeben, d.h. aufgeschrieben werden. Außerdem müssen und können nur dann Parameter übergeben, wenn die [[Skript:Funktionen|Funktionsdefinition]] sie auch enthält und zwar **genau** so viele die Funktionsdefinition enthält und vom gleichen [[Skript:Daedalus|Typ]]! | ||
- | :**Beispiel (fortgesetzt)** | + | ===== Rückgabewert, englisch: return value ===== |
- | :Deine Mutter schreibt auf ihren Zettel, dass sie eine Zahl bzw. //int// als Antwort möchte. Die Zahl ist der Gesamteinkaufspreis in //Eurocent//. | + | Manchmal möchte man eine //Antwort// über das //Ergebnis// der Funktion erhalten. Dazu muss in der Funktionsdefinition der Antworttyp, Ergebnistyp oder Rückgabetyp festgelegt werden. Zulässig sind alle [[Skript:Daedalus|Typen]] oder ''void'', welches soviel bedeutet wie: kein Rückgabewert. |
- | :__func int Kind_Kauft_Bei_Gesamtpreis(Kind,Produkt,Anzahl,Haendler) { return Gesamtpreis; };__ | + | |
- | :Es gehört zum guten Ton, dass die Mutter sich diese Antwort merkt. | + | |
- | :__var int ausgegeben;__ | + | |
- | :__ausgegeben = ausgegeben + Kind_Kauft_Bei_Gesamtpreis(Du,Bioeier,12,Bioladen);__ | + | |
- | :In diesem Beispiel merkt sich deine Mutter, wieviel ihre Kinder insgesamt bisher ausgegeben haben, in dem sie zu dem was bisher ausgegeben wurde das hinzuzählt was zuletzt ausgegeben wurde. | + | |
- | :Wenn die //Antwort// der Funktion mittels der Anweisung __return Wert_vom_Werttyp_typ;__ zurückgegeben wird, dann wird sofort die weitere Abarbeitung des //Todo-Zettels// eingestellt, beendet. | + | **Beispiel (fortgesetzt)** |
+ | Deine Mutter schreibt auf ihren Zettel, dass sie eine Zahl bzw. ''int'' als Antwort möchte. Die Zahl ist der Gesamteinkaufspreis in //Eurocent//. | ||
+ | <code>func int Kind_Kauft_Bei_Gesamtpreis(Kind,Produkt,Anzahl,Haendler) { return Gesamtpreis; };</code> | ||
+ | Es gehört zum guten Ton, dass die Mutter sich diese Antwort merkt. | ||
+ | <code>var int ausgegeben; | ||
+ | ausgegeben = ausgegeben + Kind_Kauft_Bei_Gesamtpreis(Du,Bioeier,12,Bioladen);</code> | ||
+ | In diesem Beispiel merkt sich deine Mutter, wieviel ihre Kinder insgesamt bisher ausgegeben haben, in dem sie zu dem was bisher ausgegeben wurde das hinzuzählt was zuletzt ausgegeben wurde. | ||
- | = Siehe auch = | + | Wenn die //Antwort// der Funktion mittels der Anweisung ''return Wert_vom_Werttyp_typ;'' zurückgegeben wird, dann wird sofort die weitere Abarbeitung des //Todo-Zettels// eingestellt, beendet. |
- | :[[Skript:Daedalus]], [[Skript:Funktionstypen]] | + | |
+ | ===== Siehe auch ===== | ||
+ | [[Skript:Daedalus]], [[Skript:Funktionstypen]] |