使用函式反應式程式設計來實作 Hangman 遊戲的邏輯。
Hangman 是一款簡單的猜字遊戲。
函式反應式程式設計是一種撰寫互動式程式的方式。它和一般觀點的差異在於,你不會寫「按下按鈕時就把計數器加一」,而是寫「計數器的值,等於按鈕被按下的次數總和」。
使用函式反應式程式設計來實作 Hangman 背後的基本邏輯。為此,你需要安裝一套函式反應式程式設計的函式庫,這部分的說明會寫在這個練習所屬語言/軌道的專屬檔案裡。
函式式程式設計的一大重點,就是讓函式不帶副作用,不必擔心函式偷偷改了哪些看不見的物件。
響應式程式設計則不同:不是讓某個元件主動去找工作,而是把工作推送給該元件。這和回呼很像,但層級高得多,抽象能力也更強大。響應式程式設計很常和函式式程式設計一起使用。
在這個練習中,我們會使用 RxJava,這是響應式程式設計中相當知名的函式庫,提供 Java API。
這個練習模擬的情境,是一個應用程式會接收兩種輸入:
這兩種輸入都是用 Observables 實作的,也就是使用 io.reactivex.Observable 這個類別。
基本上,你可以訂閱一個Observable,對在某處產生的值做出「反應」。舉例來說,當遊戲引擎偵測到新遊戲開始時,就會推送新的單字;或是鍵盤事件會產生字母輸入。
不過許多響應式框架都提供了強大的抽象機制,例如map可以改變收到的輸入,或是combine能把一個或多個Observable合併在一起。
Output類別是這個練習處理後預期得到的結果,讓前端不必自行保存任何形式的資料,就能顯示遊戲的完整狀態,因此也讓它具有函式風格。
在這個練習中,你必須設法運用這兩種輸入,產生這種以Observable形式呈現的輸出。