###Keyword###
Func...Return...EndFunc

###Description###
Definiert eine eigene Funktion, die Argumente aufnehmen <i>kann</i> und optional ein Ergebnis zurckgibt.

###Syntax###
<b>Func</b> functioname ( [<b>ByRef</b>] $param1, ..., [<b>ByRef</b>] $paramN, $optionalpar1 = value, ...)
	...
	[<b>Return</b> [<i>value</i>]]
<b>EndFunc</b>


###Parameters###
Die Parameter werden von dir selbst gewhlt. Spter rufst du sie genau wie die eingebauten Funktionen auf.


###Remarks###
Das Schlsselwort ByRef ist optional und bedeutet, dass der Parameter 1. eine Variable sein muss und die Variable 2. von der Funktion gendert werden kann. Standardmig wird ein Parameter <i>durch seinen Wert bergeben</i>, d.h. dass eine Kopie des Parameterwertes von der Funktion manipuliert wird.

Das Schlsselwort Return wird benutzt, um die Funktion zu verlassen. Im Gegensatz zu eingbauten Funktionen geben eigene Funktionen immer 0  zurck, wenn nichts anderes veranlasst wird.

Arrays knnen den Funktionen ber- und von ihnen zurckgegeben werden, indem einfach der Arrayname ohne Klammern angegeben wird. Beachte, dass innerhalb einer Funktion keine weitere Funktionsdeklaration stehen kann!

Parameter werden als optional definiert, indem man ihnen einen standardwert zuweist. Das kann auch ein Makro sein. Diese knnen nicht in obligatorische Parameter eingebunden werden. Optionale Parameter sind immer die letzten in der Funktionsdeklaration. Innerhalb der Funktion kann die Anzahl der beim Aufruf angegebene Parameter ber das Makro @NUMPARAMS in Erfahrung gebracht werden..

###Related###
<a href="Dim.htm">Dim/Global/Local</a>, <a href="include.htm">#include</a>


###Example###
; Beipselskript mit drei nutzerdefinierten Funktionen
; Beachte die Verwendung von Variablen, ByRef und Return

$foo = 2
$bar = 5
msgBox(0,"Heute ist " & today(), "$foo ergibt " & $foo)
swap($foo, $bar)
msgBox(0,"nachdem $foo und $bar vertauscht wurden", "$foo now contains " & $foo)
msgBox(0,"Zu guter Letzt:", "Die grere Zahl von 3 und 4 ist " & max(3,4))
Exit

Func swap(ByRef $a, ByRef $b)  ;vertauscht den Inhalt zweier Variablen
	Local $t
	$t = $a
	$a = $b
	$b = $t
EndFunc

Func today()  ;Gibt das aktuelle Datum in der Form dd/mm/yyyy zurck
	return (@MDAY & "/" & @MON & "/" & @YEAR)
EndFunc

Func max($x, $y)  ;Gibt die grere von zwei Zahlen zurck
	If $x > $y Then
		return $x
	Else
		return $y
	EndIf
EndFunc

;Ende des Beispiel-Skriptes
