====== 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 [[Skript:Bezeichner|Name]] aufgerufen wird. ===== Definition ===== func typ Name ( //hier, zwei Parameter. Bei einer Parameteranzahl zwischen 0 und 8 gibt es keine Probleme var typ ParameterA, var KLASSEN_TYP ParameterB ) { //TODO Liste, der Aufgabenzettel für die Engine //Variablenzuweisung Questvariable = Konstante; //Eigenschaftenzuweisung ParameterB.eigenschaft[ParameterA] = Andere_Konstante; //Der Rückgabewert return Wert_Vom_Typ_typ; }; ^Code ^Beschreibung ^Möglicher Wert^ |typ|Bezeichnet einen Werttyp.|int, float, string, void (kein Rückgabewert), C_NPC, C_ITEM| |KLASSEN_TYP|Bezeichnet einen Werttyp, der eine [[Skript:Klassen|Klasse]] ist.|C_NPC, C_ITEM, C_INFO| |Name|Bezeichnet die Funktion. Ihr Name muss neu sein.|FunktionA, ABC_Funktion, A_Funktion_001| |ParameterA, ParameterB|Bezeichnen die Parameter einer Funktion.|siehe oben| |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]]. ===== 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** 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** **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]]! ===== 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 [[Skript:Daedalus|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 ===== [[Skript:Daedalus]], [[Skript:Funktionstypen]]