Ein Forum, in dem sich neue Clonk Entwickler untereinander austauschen können.
 
StartseiteStartseite  PortalPortal  FAQFAQ  SuchenSuchen  AnmeldenAnmelden  MitgliederMitglieder  LoginLogin  

Austausch | 
 

 return und Funktionsaufrufe

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach unten 
AutorNachricht
Elfangor
General
General
avatar

Männlich Alter : 25
Ort : Mainz
Anmeldedatum : 26.06.08

BeitragThema: return und Funktionsaufrufe   Sa Jan 30, 2010 6:27 pm

return und Funktionsaufrufe

Vorwissen:
Keins

Schwierigkeit:
***** (Grundlagen)

Heute dreht es sich bei mir mal um das "return" und "Funktionsaufrufen".


Was ist das eigentlich?

return ist eine Möglichkeit das Ergebnis oder einen Wert oder eine Variable von einer Funktion an die Umwelt abzugeben. Nach einem return aufruf wird die Funktion übrigens immer abgebrochen.
Man kann sich das wunderbar vorstellen wenn man sagt das das Script aus einem Raum mit Truhen besteht. Die Truhen stellen die Funktionen dar wie "Initialize", "Hit", oder selbstgemachtes wie "Addieren".
Die Truhe mit Initialize ist nie verschlossen und wird einmal am anfang geöffnet. Diese gibt vielleicht Schlüssel für andere Funktionen wenn diese darin aufgerufen werden.

Nun ist ein Return einfach das was die Funktion zurückgibt. Die Truhe geht also auf und hält z.B einen Wert hoch. Nehmen wir mal 5 oder einfach ein gefundenes Objekt wie einen bestimmten Clonk.

Dieser kann von anderen Truhen aufgenommen werden um damit arbeiten zu können.


Ein Beispiel pls!

Ein super einfaches Beispiel ist das für eine Rechnung.

Ich habe also in meinem Script folgendes stehen.

Code:


func Initialize(){

var Ergebnis = Rechner(2,5);

}


protected func Rechner(var a,var b){

var Zahl = a+b;
return(Zahl);
}

Das Ergebnis ist natürlich 7.
Doch was ist dies! Rechner(var a, var b){...?!
Tja das ist etwas was untrennbar mit return verbunden ist.
Ich kann nämlich eine Funktion mit bestimmten Werten aufrufen. Das heißt ich sage der Truhe: "Hier ich geb dir 2 und 5 und du machst dann dein Zeug damit".
Da die Truhe ziemlich doof ist kann sie mit 2 und 5 nicht mehr anfangen als sie zusammenzurechnen Wink.
Dann kommt das return(Zahl); was nicht mehr und nicht weniger bedeutet, das Zahl an die Öffentlickeit der Truhen weitergegeben wird.
In Initialize steht Rechner(2,5). Jetzt wissen wir was Rechner() macht und können sagen: Rechner(2,5) = 7.


Ja okay aber wie genau funktioniert das mit dem Werte übergeben?

Hm die Antwort darauf ist einfach. Man muss nur immer beachten auch alles richtig zu machen. Man kann jede Funktion im selben Script zu jedem Zeitpunkt aufrufen. Um das zu tun gibt man ganz einfach dessen Namen ein: "Rechner()".
Um nun aber zu sagen das die Truhe Namens Rechner mir 5 und 2 addieren soll geben wir ihm natürlich die Zahlen mit. Rechner(2,5);
Damit die Funktion Rechner damit aber auch was anfangen kann, muss man sozusagen zwei Löcher bohren um die 2 und die 5 zu empfangen.
Das geht so. In der Funktion Rechner da oben steht ja Rechner(var a, var b). Das heißt Tür 1 oder Parameter 1 der übergeben wird an Rechner wird in der Variable a festgehalten. Der zweite in b. Dann hat die Funktion direkt a und b definiert und kann damit arbeiten.


Okay hab ich verstanden. Zurück zu return. Wann ist das sinnvoll und wann nicht?

Das ist eine sehr wichtige Frage. Viele tausend Zeilen Code wurden schon vergewaltigt mit einem return() das niemals gebraucht wird. Ein return ist immer nur dann sinnvoll wenn diese Funktion von einer anderen Funktion benötigt wird. Es bringt nichts einfach ein return hinzuschreiben wenn man damit nix tut. Nur wenn der Aufruf einen Rückgabewert braucht ist es sinnvoll. Es können übrigens auch mehrere Dinge zurückgegeben werden. z.B return(Zahl,a,b,23,3,"Text");.

Natürlich brauch man neuerdings keine Klammern bei return mehr aber ich werde eure Scripts nicht verbessern wenn ihr da keine Klammern habt weil es total unlesbar wird oO.

Ich hoffe man konnte verstehn was ich so geschrieben habe. Bei Fragen kann ich es natürlich gerne editieren.

Mit freundlichen Grüßen

Elfangor
Nach oben Nach unten
Benutzerprofil anzeigen http://www.m-w-c.de.vu
Wipfmagus
Konteradmiral
Konteradmiral
avatar

Weiblich Alter : 22
Anmeldedatum : 06.03.10

BeitragThema: Re: return und Funktionsaufrufe   Di März 16, 2010 1:38 pm

Ein schönes Tutorial. Aber es ist immer eine schwere Frage, wann man eine Funktion für eine andere Funktion verwenden will und wann nicht. Ist es nicht besser, ein sinnloses return() einzufügen als in einem Fall, den man mal nicht testet, einen "Error: Function didn't return" zu erhalten??
Nach oben Nach unten
Benutzerprofil anzeigen
Elfangor
General
General
avatar

Männlich Alter : 25
Ort : Mainz
Anmeldedatum : 26.06.08

BeitragThema: Re: return und Funktionsaufrufe   Di März 16, 2010 10:10 pm

Es ist aufgrund lesbarkeit immer besser etwas zu lassen als den Code unnötig zu verschmutzen. Der gute Coder weiss wie sein Programm aussehen soll und weiss welche Funktionen returnen und welche das nicht sollen. Außerdem tut ein return() gar nichts nützliches wenn du es so hinschreibst.
Nach oben Nach unten
Benutzerprofil anzeigen http://www.m-w-c.de.vu
Wipfmagus
Konteradmiral
Konteradmiral
avatar

Weiblich Alter : 22
Anmeldedatum : 06.03.10

BeitragThema: Re: return und Funktionsaufrufe   Mi März 17, 2010 1:17 am

Aber bei einer Funktion wie Hit() oder Initialize(), die nicht zum künstlichen Aufgerufenwerden, sondern zum Sich-ereignen gedacht ist, kann es doch trotzdem passieren, dass man es reinitialisiert oder ein Auftreffen simulieren will...
Nach oben Nach unten
Benutzerprofil anzeigen
Elfangor
General
General
avatar

Männlich Alter : 25
Ort : Mainz
Anmeldedatum : 26.06.08

BeitragThema: Re: return und Funktionsaufrufe   Fr März 19, 2010 5:33 pm

Du kannst eine Funktion ja auch ohne If aufrufen. Ein return bringt dir ja nur etwas wenn du mit dem Wert den die aufgerufene Funktion von der Aufruffunktion bearbeitet wird.

Du kannst bei Hit gerne ein Explode(80) returnen aber das wird dir nicht viel bringen. Es sei denn du willst wissen ob Explode(80) true returnt als Beweis das das Ding hochgegangen ist.
Nach oben Nach unten
Benutzerprofil anzeigen http://www.m-w-c.de.vu
Wipfmagus
Konteradmiral
Konteradmiral
avatar

Weiblich Alter : 22
Anmeldedatum : 06.03.10

BeitragThema: Re: return und Funktionsaufrufe   Fr März 19, 2010 5:44 pm

Ok, verstanden. Dank dem superguten Tutorial und deiner Antwort werde ich die Welt nun etwas weniger mit returns verschmutzen^^
Nach oben Nach unten
Benutzerprofil anzeigen
Gesponserte Inhalte




BeitragThema: Re: return und Funktionsaufrufe   

Nach oben Nach unten
 
return und Funktionsaufrufe
Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach oben 
Seite 1 von 1
 Ähnliche Themen
-
» [Sammelthread] Erreiche Forum nicht mehr - you can return to the index
» Return of Love Rpg
» [Vorlage beachten] Sailor Moon RPG - The Chaos Return
» Return to Sunnydale Ein Buffy und Angel Rs

Befugnisse in diesem ForumSie können in diesem Forum nicht antworten
CNDG :: Anfänger :: Tutorials-
Gehe zu: