Tracks
/
Java
Java
/
Übungen
/
Galgenmännchen
Galgenmännchen

Galgenmännchen

Schwer

Anleitung

Implementiere die Logik des Hangman-Spiels mit funktionaler reaktiver Programmierung.

Hangman ist ein einfaches Wortratespiel.

Funktionale reaktive Programmierung ist eine Möglichkeit, interaktive Programme zu schreiben. Sie unterscheidet sich von der üblichen Sichtweise: Statt zu sagen „wenn die Taste gedrückt wird, erhöhe den Zähler“, schreibst du „der Wert des Zählers ist die Summe der Anzahl, wie oft die Taste gedrückt wurde“.

Implementiere die grundlegende Logik hinter Hangman mit funktionaler reaktiver Programmierung. Dafür musst du eine FRP-Bibliothek installieren, das wird in den sprach- und trackspezifischen Dateien der Übung beschrieben.

Hinweise

Ein wesentlicher Aspekt der funktionalen Programmierung sind nebenwirkungsfreie Funktionen: Du musst dich nicht fragen, welche versteckten Objekte eine Funktion verändert hat.

Bei der reaktiven Programmierung sucht eine Komponente nicht mehr aktiv nach Arbeit, sondern die Arbeit wird an die Komponente geschickt. Das ähnelt Callbacks, ist aber auf einer viel höheren Ebene angesiedelt und bietet mächtigere Abstraktionen. Sehr oft wird reaktive Programmierung zusammen mit funktionaler Programmierung eingesetzt.

In dieser Übung verwenden wir RxJava, eine bekannte Bibliothek für reaktive Programmierung mit einer Java-API.

Der simulierte Kontext dieser Übung ist eine Anwendung, die zwei Eingaben erhält:

  • die neuen Wörter, die eine Spiel-Engine zum Erraten liefert,
  • die Buchstaben, die der Spieler auswählt.

Diese beiden Eingaben werden mit Observables umgesetzt, und zwar mit der Klasse io.reactivex.Observable. Im Grunde kannst du ein Observable abonnieren, um auf die Werte zu „reagieren“, die irgendwo erzeugt werden. Zum Beispiel schickt die Spiel-Engine neue Wörter, sobald sie erkennt, dass ein neues Spiel gestartet ist, oder Tastaturereignisse erzeugen Buchstabeneingaben.
Aber viele reaktive Frameworks bieten mächtige Abstraktionen, wie zum Beispiel map, mit dem du die empfangene Eingabe ändern kannst, oder combine, mit dem du ein oder mehrere Observables zusammenführen kannst.

Die Klasse Output ist das erwartete Ergebnis der Verarbeitung in dieser Übung. Sie ermöglicht es einem Frontend, den vollständigen Zustand des Spiels anzuzeigen, ohne dass es selbst irgendeine Form von Speicher braucht. Damit ist auch das Frontend funktional.
In dieser Übung musst du einen Weg finden, beide Eingaben zu nutzen, um diese Ausgabe in Form eines Observable zu erzeugen.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Java Exercism

Bereit, mit Galgenmännchen zu starten?

Melde dich bei Exercism an, um Java mit 26 Konzepte158 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.