© Excellent backgrounds/Shutterstock.com
Java Magazin
Reactive Programming mit JavaFX

Einfach und effizient

Die Nutzer von heute stellen hohe Erwartungen an die Benutzeroberflächen ihrer Programme. Ein sofortiges Feedback auf Eingaben und stets aktuelle Informationen werden erwartet, auch ohne dazu ständig auf irgendwelche Aktualisieren- oder Übernehmen-Knöpfe drücken zu müssen. Reactive Programming ist ein Programmierparadigma, das wie geschaffen für die moderne GUI-Entwicklung ist. Im Folgenden soll das Konzept vorgestellt und der Einsatz mit JavaFX gezeigt werden.

Manuel Mauky


Video: Produktives Hacking mit JavaFX

Die Anforderungen an moderne Programmoberflächen stellen GUI-Entwickler vor nicht zu unterschätzende Herausforderungen, für die klassische Ansätze kaum noch geeignet sind oder zumindest einige Probleme bereiten. Das Problem ist, dass unsere Programmiersprachen und -paradigmen im Wesentlichen darauf ausgelegt sind, den Programmablauf zu kontrollieren und zu steuern: zuerst Daten einlesen, verarbeiten und dann ausgeben. Bei interaktiven Programmen kann der Programmablauf aber nicht mehr ausschließlich durch den Entwickler vorgegeben werden, da stattdessen Ereignisse wie Benutzereingaben oder Änderungen in externen Datenquellen über die zeitliche Abfolge des Programms bestimmen, über die der Entwickler keine Kontrolle besitzt.

Die klassische Antwort auf diese Situation heißt Observer, Listener oder Callback. Es wird ein Stück Code registriert, das ausgeführt wird, sobald ein bestimmtes Ereignis, zum Beispiel eine Nutzereingabe, eintritt. Die Nachteile dieses Vorgehens können jedoch beträchtlich sein: Bei nicht trivialen Programmen ist der Programmfluss oft nur noch schwer zu erahnen, vor allem wenn Callbacks verschachtelt sind. Wann und in welcher Reihenfolge welcher Code ausgeführt wird, ist dann nicht mehr ohne Weiteres ersichtlich. Fehler und Bugs sind folglich nur schwer aufzuspüren.

Ein weiterer Aspekt, der Callbacks schwierig handhabbar macht, ist die Koordinierung des Programmzustands: Callbacks sind keine „puren“ Funktionen im Sinne der funktionalen Programmierung, da sie keinen Rückgabetyp besitzen, sondern ausschließlich über Seiteneffekte wirken, also z. B. den Zustand von (aus Sicht des Callbacks) globalen Variablen verändern und auch lesend auf den globalen Programmzustand zugreifen. Dies macht oft umständliche Prüfungen bezüglich des gegenwärtigen Programmzustands notwendig. Unter JavaScript-Entwicklern (und nicht nur bei diesen) ist diese Situation als „Callback-Hölle“ bekannt.

Listing 1int a = 5;int b = 3; int c = a + b;System.out.println(c) // 8 a = 4;System.out.println(c) // ?

Das Paradigma „Reactive Programming“ stellt eine vielversprechende Alternative dar, mit der GUI-Programme effizienter entwickelt werden können. Seit einiger Zeit erlebt der Begriff einen gewissen Hype, tatsächlich ist das Paradigma aber schon älter. Ein häufiges Missverständnis in diesem Zusammenhang soll aber noch ausgeräumt werden, bevor wir uns Reactive Programming im Detail anschauen:

Obwohl der Begriff „Reactive Programmi...

Java Magazin
Reactive Programming mit JavaFX

Einfach und effizient

Die Nutzer von heute stellen hohe Erwartungen an die Benutzeroberflächen ihrer Programme. Ein sofortiges Feedback auf Eingaben und stets aktuelle Informationen werden erwartet, auch ohne dazu ständig auf irgendwelche Aktualisieren- oder Übernehmen-Knöpfe drücken zu müssen. Reactive Programming ist ein Programmierparadigma, das wie geschaffen für die moderne GUI-Entwicklung ist. Im Folgenden soll das Konzept vorgestellt und der Einsatz mit JavaFX gezeigt werden.

Manuel Mauky


Video: Produktives Hacking mit JavaFX

Die Anforderungen an moderne Programmoberflächen stellen GUI-Entwickler vor nicht zu unterschätzende Herausforderungen, für die klassische Ansätze kaum noch geeignet sind oder zumindest einige Probleme bereiten. Das Problem ist, dass unsere Programmiersprachen und -paradigmen im Wesentlichen darauf ausgelegt sind, den Programmablauf zu kontrollieren und zu steuern: zuerst Daten einlesen, verarbeiten und dann ausgeben. Bei interaktiven Programmen kann der Programmablauf aber nicht mehr ausschließlich durch den Entwickler vorgegeben werden, da stattdessen Ereignisse wie Benutzereingaben oder Änderungen in externen Datenquellen über die zeitliche Abfolge des Programms bestimmen, über die der Entwickler keine Kontrolle besitzt.

Die klassische Antwort auf diese Situation heißt Observer, Listener oder Callback. Es wird ein Stück Code registriert, das ausgeführt wird, sobald ein bestimmtes Ereignis, zum Beispiel eine Nutzereingabe, eintritt. Die Nachteile dieses Vorgehens können jedoch beträchtlich sein: Bei nicht trivialen Programmen ist der Programmfluss oft nur noch schwer zu erahnen, vor allem wenn Callbacks verschachtelt sind. Wann und in welcher Reihenfolge welcher Code ausgeführt wird, ist dann nicht mehr ohne Weiteres ersichtlich. Fehler und Bugs sind folglich nur schwer aufzuspüren.

Ein weiterer Aspekt, der Callbacks schwierig handhabbar macht, ist die Koordinierung des Programmzustands: Callbacks sind keine „puren“ Funktionen im Sinne der funktionalen Programmierung, da sie keinen Rückgabetyp besitzen, sondern ausschließlich über Seiteneffekte wirken, also z. B. den Zustand von (aus Sicht des Callbacks) globalen Variablen verändern und auch lesend auf den globalen Programmzustand zugreifen. Dies macht oft umständliche Prüfungen bezüglich des gegenwärtigen Programmzustands notwendig. Unter JavaScript-Entwicklern (und nicht nur bei diesen) ist diese Situation als „Callback-Hölle“ bekannt.

Listing 1int a = 5;int b = 3; int c = a + b;System.out.println(c) // 8 a = 4;System.out.println(c) // ?

Das Paradigma „Reactive Programming“ stellt eine vielversprechende Alternative dar, mit der GUI-Programme effizienter entwickelt werden können. Seit einiger Zeit erlebt der Begriff einen gewissen Hype, tatsächlich ist das Paradigma aber schon älter. Ein häufiges Missverständnis in diesem Zusammenhang soll aber noch ausgeräumt werden, bevor wir uns Reactive Programming im Detail anschauen:

Obwohl der Begriff „Reactive Programmi...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang