Ereignisorientierte Programmierung
Die ereignisorientierte Programmierung (engl. event-driven programming) ist ein Programmierparadigma, das auf der Idee beruht, dass bestimmte Teile eines Programms nur dann und genau dann ausgeführt werden, wenn ein bestimmtes äußeres Ereignis (engl. event) eintritt. Dieses Ereignis kann vom Benutzy oder von einer anderen Programmkomponente ausgelöst werden.
Visuelle Programmierung
Viele visuelle Programmiersprachen sind ereignisorientiert konstruiert. Ein typisches Beispiel ist Scratch mit Ereignissen wie Wenn die grüne Flagge angeklickt
, wenn Taste [Leertaste v] gedrückt wird
oder wenn ich als Klon entstehe
. Jeglicher Programmcode, der ausgeführt werden soll, muss an einen solchen Ereignisblock angehängt sein, ansonsten wird er beim Ablauf des Programms ignoriert. Diese Blöcke haben typischerweise eine halbrunde Form aufgesetzt.
Auch andere blockbasierte Programmierumgebungen basieren auf diesem Konzept: in MakeCode, mit dem etwa der Calliope mini und der microBit programmiert werden können, sind diese Blöcke etwa C-förmig. Ähnliches gilt für den AppInventor, in dem Ereignisblöcke in der Regel ockerfarben sind. Im AppInventor werden Ereignisse in der Regel von den sichtbaren und unsichtbaren Komponenten der App ausgelöst, also von den einzelnen Bildschirmen, sichtbaren GUI]-Komponenten wie Buttons oder Auswahlfeldern, aber auch von unsichtbaren Komponenten wie dem Lagesensor oder einer Datenbank.
Textuelle Programmierung
JavaScript
Die Web-Programmierung mit HTML und JavaScript ist grundlegend ereignisorientiert aufgebaut: Jede Aktion in JavaScript kann und sollte von einem Ereignis ausgelöst werden. in HTML kann jedes Element mit Ereignis-Attributen versehen werden, mit denen festgelegt wird, welche JavaScript-Anweisungen ausgeführt werden sollen, wenn das entsprechende Ereignis eintritt.
Attribut | Wird ausgelöst, wenn… |
---|---|
onclick
|
… das Element angeklickt wird. |
ondblclick
|
… das Element doppelt angeklickt wird. |
onmousedown
|
… auf dem Element eine Maustaste gedrückt wird. |
onmousemove
|
… sich der Mauszeiger bewegt, während die Maus über dem Element ist. |
onmouseout
|
… der Mauszeiger von dem Element wegbewegt wird. |
onmouseover
|
… sich der Mauszeiger über ein Element bewegt. |
onmouseup
|
… die Maustaste auf einem Element losgelassen wird. |
onwheel
|
… das Mausrad auf einem Element bewegt wird. |
In diesen Attributen kann man dann ein beliebiges Stück JavaScript einsetzen, das genau dann ausgeführt wird, wenn das Ereignis eintritt. Das kann, wie im folgenden Beispiel, eine Sequenz von Anweisungen sein; eleganter ist es aber, auf eine Funktion zu verweisen, die die Anweisungen enthält, die ausgeführt werden sollen.
Das folgende Stück HTML …
<button onclick="alert('Tada!')"
onmouseover="this.innerText='Klick mich!'"
onmouseout="this.innerText='Tada!'">
Tada!
</button>
… erweckt diesen Button zum Leben:
Andere Ereignisse sind nicht von konkreten HTML-Elementen, sondern von der ganzen Seite abhängig. Die dazugehörigen Ereignis-Attribute werden dann dem <body>
-Tag hinzugefügt.
Attribut | Wird ausgelöst, wenn… |
---|---|
onafterprint
|
… das Dokument ausgedruckt worden ist. |
onbeforeprint
|
… das Dokument ausgedruckt werden soll. |
onerror
|
… ein Fehler passiert. Dieses Attribut kann auch für andere HTML-Elemente verwendet werden, etwa für Bilder. |
onload
|
… die Seite fertig geladen ist. |
onoffline
|
… der Browser die Internetverbindung verliert. |
ononline
|
… der Browser wieder online ist. |
onpagehide
|
… das Nutzy von der Seite wegnavigiert. |
onpageshow
|
… das Nutzy diese Seite ansteuert. |
onresize
|
… das Browserfenster vergrößert oder verkleinert wird. |
PyGame Zero
An sich unterstützt Python keine ereignisorientierte Programmierung. Um die Programmierung von Spielen, die oft ereignisorientiert gestrickt sind, zu erleichtern, gibt es in der Bibliothek PyGame Zero eine Schnittstelle für ereignisorientierte Programmierung: für Ereignisse wie Tastendrucke und Mausklicks können Funktionen überschrieben werden, die dann während des Spiels von der internen Logik von PyGame Zero angesteuert werden:
Die Funktion on_mouse_down()
wird immer dann aufgerufen, wenn die Maus geklickt wird.
def on_mouse_down():
print("Mouse button clicked")
Ereignisfunktion | Wird aufgerufen, wenn … |
---|---|
on_mouse_down
|
… die Maustaste gedrückt wird. |
on_mouse_up
|
… die Maustaste losgelassen wird. |
on_mouse_move
|
… die Maus bewegt wird. |
on_key_down
|
… eine Taste gedrückt wird. |
on_key_up
|
… eine Taste losgelassen wird. |
on_music_end
|
… ein Musikstück fertig abgespielt worden ist. |