Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Callback-Funktionen

von MitgliedStueberSeite 1 von 1

Für dieses Tutorial musst du bereits wissen, was BefehlsreferenzeintragFunktionen sind und wie man BefehlsreferenzeintragZeiger benutzt.

Was ist eine Callback-Funktion?

Eine Callback-Funktion (zu Deutsch: Rückruffunktion) ist eine Funktion, die dynamisch vom Programm aufgerufen wird, ohne dass dies explizit im Quelltext steht. So wird einerseits das Programm dynamischer und andererseits können dir Callback-Funktionen, wenn du sie richtig benutzt, viel Denkaufwand abnehmen. Dieses Tutorial zeigt, wie du in FreeBASIC mit Callback-Funktionen arbeitest.
Allgemeine Informationen zu Callback-Funktionen finden sich übrigens auch im Externer Link!Wikipedia-Artikel zu Rückruffunktionen.

Wie benutzt man eine Callback-Funktion?

Variablen (=> Daten) liegen im Arbeitsspeicher, das weißt du sicher schon. Aber auch Funktionen (=> Programm) liegen Externer Link!im Arbeitsspeicher. Für einen Aufruf einer Funktion brauchst du nur einen Zeiger auf sie. Zeiger hast du bisher wahrscheinlich nur mit Variablen benutzt. Du kannst aber auch ganz leicht einen Zeiger auf ein Sub erstellen. Du benutzt ganz normal BefehlsreferenzeintragDIM und benutzt als Datentyp "sub()". Wenn deine Callback-Funktionen Parameter haben, musst du diese zwischen den Klammern angeben. So könnte ein Funktionszeiger also aussehen:

dim as sub() callback

Hier wird ein Funktionszeiger mit dem Namen callback erzeugt.

An den Zeiger einer Funktion kommst du über den Namen mit einem vorangestelltem "@" (siehe BefehlsreferenzeintragPointer).

Beispiel

Ein einfaches, aber nicht sehr sinnvolles Beispiel, wäre ein kleiner Taschenrechner. Sicher hast du dich schon mal an einem Taschenrechner versucht.

sub plus (byval o1 as integer, byval o2 as integer)
  print o1 + o2
end sub

sub minus (byval o1 as integer, byval o2 as integer)
  print o1-o2
end sub

sub mul (byval o1 as integer, byval o2 as integer)
  print o1*o2
end sub

sub div (byval o1 as integer, byval o2 as integer)
  print o1/o2
end sub


dim as sub(byval o1 as integer, byval o2 as integer) callback
dim as integer mode = 0

do
    print "1. Plus"
    print "2. Minus"
    print "3. Mal"
    print "4. Geteilt"
    do
        mode = val(inkey)
    loop until mode > 0 and mode < 5
    cls

    if mode = 1 then callback = @plus
    if mode = 2 then callback = @minus
    if mode = 3 then callback = @mul
    if mode = 4 then callback = @div

    dim as integer o1,o2
    input "Operant 1: ",o1
    input "Operant 2: ",o2

    callback(o1,o2)

    sleep
    cls
loop

Das Beispiel zeigt nur, wie man Callback-Funktionen benutzt; das enorme Potenzial von ihnen wird hier nicht sichtbar, da man bei so einem Taschenrechner auch normale Subs nehmen könnte.

Anwendungen

Wenn du vorhast, ein Programm mit einer echten Oberfläche (TUI/GUI) zu erstellen, wirst du nicht um Callback-Funktionen herumkommen. Alle großen GUI-Bibliotheken benutzen Callbacks oder ähnliches für das Auswerten von Benutzereingaben. Sinnvolle Einsatzzwecke von Callback-Funktionen sind:

Gefahren

Es sollte immer (wirklich immer!), bevor eine Funktion über einen Funktionszeiger aufgerufen wird, überprüft werden, ob der Zeiger 0 enthält. Ist das der Fall wird dein Programm normalerweise abstürzen. Im Beispiel von weiter oben sähe diese Sicherheitsüberprüfung so aus:

if callback <> 0 then callback(o1,o2)

 

Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 10.02.2010 von MitgliedStueber angelegt.
  • Die aktuellste Version wurde am 20.03.2010 von RedakteurMOD gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen