| Beide Seiten, vorherige Überarbeitung
Vorherige Überarbeitung
|
|
skript:funktionen [2026/08/13 05:04] 216.73.216.176 alte Version wiederhergestellt (2026/08/11 19:20) |
skript:funktionen [2026/08/14 21:23] (aktuell) 43.172.196.188 alte Version wiederhergestellt (2026/07/12 06:36) |
| = 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]] |