関数型リアクティブプログラミングを使って、ハングマンゲームのロジックを実装してください。
ハングマンは、単語を当てるシンプルなゲームです。
関数型リアクティブプログラミングは、インタラクティブなプログラムを書くための考え方です。通常の見方とは異なり、「ボタンが押されたらカウンターを増やす」と書く代わりに、「カウンターの値は、ボタンが押された回数の合計である」と書きます。
関数型リアクティブプログラミングを使って、ハングマンの基本的なロジックを実装してください。そのためには、関数型リアクティブプログラミングのライブラリをインストールする必要があります。インストール方法は、この演習のプログラミング言語やトラックに固有のファイルで説明されています。
関数型プログラミングの大きな特長の1つは、副作用のない関数を持つことです。関数が書き換えた目に見えないオブジェクトを気にかけなくて済みます。
リアクティブプログラミングでは、コンポーネントが自分から処理を探しにいくのではなく、処理のほうがコンポーネントへプッシュされます。これはコールバックに似ていますが、ずっと高いレベルで、より強力な抽象化を備えています。リアクティブプログラミングは、関数型プログラミングと組み合わせて使われることがよくあります。
この演習では、JavaのAPIでリアクティブプログラミングを行うための有名なライブラリ、RxJavaを使います。
この演習で想定する状況は、2つの入力を受け取るアプリケーションです。
これらの入力はどちらもObservablesで実装されています。使うのはio.reactivex.Observableクラスです。
基本的には、Observableを購読すると、どこかで生成された値に「反応」できます。たとえば、ゲームエンジンは新しいゲームが始まったことを検知すると新しい単語をプッシュし、キーボードのイベントは文字の入力を生成します。
しかし、リアクティブフレームワークの多くは強力な抽象化を提供しています。mapを使えば受け取った入力を変換できますし、combineを使えば1つ以上のObservableをマージできます。
Outputクラスは、この演習の処理が期待する結果です。これを使えば、フロントエンドは何らかのストレージを必要とせずにゲームの完全な状態を表示できます。そのため、フロントエンドも関数的になります。
この演習では、2つの入力をどちらも使って、この出力をObservableの形で生成する方法を見つける必要があります。