FreeBasic: Funktionen

Aus Wikibooks


Eine Funktion ist eigentlich das Gleiche wie ein Sub, aber auch nur eigentlich. Funktionen haben den unschlagbaren Vorteil, dass sie einen Wert zurückliefern können. Hört sich gar nicht so toll an, ist es aber. Den Wert kann man auf verschiedenste Art nutzen. Eine Funktion könnte wenn ein Fehler auftrat, 1 zurückliefern, wenn kein Fehler auftrat 0. Oder man könnte das Ergebnis einer Rechnung zurückliefern. Du hast im Laufe des Buches auch schon Funktionen mit Rückgabewert benutzt. Im Kapitel Zufall waren zwei Funktionen die Zufallszahlen zurückliefern sollen. Wie du siehst sind die Möglichkeiten riesig und Funktionen gehören zu den wichtigsten Programmiertechniken überhaupt. Eine Funktion muss wie ein Sub erst deklariert werden:

declare function Rechne (byval a as integer, byval b as integer) as integer

Zwei Sachen sind anders, anstatt Sub wird das Wort Function benutzt und nach den Klammern steht noch "as integer". Das bedeutet das der Rückgabewert vom Typ Integer ist. So sieht damit die ganze Funktion aus:

declare function Rechne (byval a as integer, byval b as integer) as integer

function Rechne (byval a as integer, byval b as integer) as integer
  return a*b/(2*a)+b              'Irgendeine Rechnung
end function

Alles gleich wie bei Subs, nur dass diesmal das Schlüsselwort Return benutzt wird. Return gibt das zurück, was nach Return kommt, also in diesem Fall das Ergebnis der Rechnung.

Rekursion[Bearbeiten]

Rekursive Funktionen werden nicht so oft gebraucht, aber sind dennoch wichtig. Eine rekursive Funktion ruft sich selber auf. Ein bekanntes Beispiel dafür ist die Berechnung der Fakultät.

declare function fakultaet (byval Zahl as integer) as integer
function fakultaet (byval Zahl as integer) as integer
    if Zahl=0 then return 1               'definitionsgemäß 1
    if Zahl<>0 then
        return Zahl * fakultaet(Zahl-1)           'Wenn man noch nicht bei 0 ist multiplizieren mit fakultaet(Zahl-1)
    end if
end function

Die Funktion ruft sich selber auf, solange bis sie bei 0 angekommen ist. Du solltest bei Funktionen die sich oft selbst aufrufen überlegen, ob du den Aufrufstack nicht vergrößern möchtest. Dies ist möglich über den Compileraufruf, siehe in den Artikel "Der Compiler".