Hi,
also eine Funktion hat einen Rückgabewert. Beispiel:
***
DEFFCT INT AddIntegers(a: in, b: in)
int a, b
return (a+b)
ENDFCT
***
Beispiel Aufruf im KRL Programm:
DEF MyProg
int c
c = AddIntegers(4,8)
;MachwasMit(c)
END
***
Verwendung z.B. falls du des öftereren wie in diesem Beispiel die Funition nutzen möchtest.
Jetzt könntest Du sagen, dann nehme ich halt ein KRL-Modul als "Vorlage/Funktion" um zwei Zahlen zu addieren. Ja das geht auch, aber wo schreibst du denn das Ergebnis dann hin? Dazu benötigst / "verbrauchst" du dann z.B. eine globale Variable oder einen OUT Parameter.
"Ich möchte nun aber mehr mit Funktionen arbeiten" ist wo möglich nicht immer der richtige Ansatz. Mann sollte sich immer überlegen, was man machen möchte und dann die passende Architektur auswählen. Wenn ich eine "Funktion" habe und ich keinen Rückgabewert benötige dann macht es keinen Sinn. Denn es muss ein Wert zurückgegeben werden. Wenn ich dann immer z.B einen Dummywert TRUE zurück gebe, dann könnte das der Aufrufer falsch interpretieren.
z.B.:
DEFFCT BOOL CheckState(a: in, b: in)
;Copyright Mr.Wrong
bool a
IF (a==b) THEN
WHILE TRUE
HALT
MsgQuit("Fehler im Programm! Programm abwählen)
ENDWHILE
ENDIF
RETURN TRUE ;Weil ich irgendetwas zurück geben muss und ansonsten wieder der Compiler meckert
ENDFCT
DEF MyProg()
...
IF (CheckState(a, b) THEN
;Fahre zu Punkt 1
else
;Fahre zu Punkt 2
ENDIF
Er wird den Punkt 2 nie anfahren. Aber der Benutzer der Funktion denkt dass er das macht
Viele Grüße