Benutzer-Werkzeuge

Webseiten-Werkzeuge


Dies ist eine alte Version des Dokuments!


= Funktionen =
: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.
:Wenn der Zettel einmal aufgeschrieben wurde, kann er immer wieder abgearbeitet werden, indem sein Name aufgerufen wird.

Definition

<head> <title>Exported from Notepad++</title> <style type="text/css"> span { font-family: 'Courier New'; font-size: 12pt; color: #CCCCCC; } .sc0 { } .sc2 { font-style: italic; color: #999999; } .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>

Erklärung

*hellgrau sind Bezeichner.
*gold und fett sind Schlüsselworte
*dunkelgrau und kursiv sind Kommentare, die vom Parser ignoriert werden.
*alle übrigen sind Symbole bzw. Operatoren

typBezeichnet einen Werttyp.int, float, string, void (kein Rückgabewert), C_NPC, C_ITEM
KLASSEN_TYPBezeichnet einen Werttyp, der eine Klasse ist.C_NPC, C_ITEM, C_INFO
NameBezeichnet die Funktion. Ihr Name muss neu sein.FunktionA, ABC_Funktion, A_Funktion_001
ParameterA, ParameterBBezeichnen die Parameter einer Funktion.siehe oben
QuestvariableBezeichnet eine globale Variablesiehe Variablen
Konstante, Andere_Konstantesiehe Konstanten

:Welche Bedeutung die Anweisungen Variablen- bzw. Eigenschaftenzuweisung und return haben steht im Abschnitt Operatoren.

Parameter (Mehrzahl)

: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 aufgerufen werden.

:Beispiel
: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.
:Noch allgemeiner formuliert lautete ihr Zettel func void Kind_Kauft_bei(Kind,Produkt,Anzahl,Haendler) {};

Funktionsaufruf

:Jede Funktion kann aufgerufen werden. Das heißt, dass die Aufgaben auf dem Zettel abgearbeitet werden.
: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.

:Beispiel (fortgesetzt)
: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);
: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 Funktionsdefinition sie auch enthält und zwar genau so viele die Funktionsdefinition enthält und vom gleichen Typ!

Rückgabewert, englisch: return value

: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 Typen oder void, welches soviel bedeutet wie: kein Rückgabewert.

: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.
: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.

= Siehe auch =
:Daedalus, Funktionstypen

skript/funktionen.1439928964.txt.gz · Zuletzt geändert: 2017/01/09 15:22 (Externe Bearbeitung)