使用函数式响应式编程实现 Hangman 游戏的逻辑。
Hangman 是一个简单的猜单词游戏。
函数式响应式编程 是一种编写交互式程序的方式。它与通常的视角不同:你不再写“按下按钮时让计数器自增”,而是写“计数器的值是按钮被按下次数的总和”。
使用函数式响应式编程实现 Hangman 背后的基本逻辑。为此你需要安装一个 FRP 库,具体做法会在该练习针对具体语言和赛道的文件中说明。
函数式编程的一个主要特点,就是让函数没有副作用:你不必去猜某个函数在背后改动了哪些看不见的对象。
而在响应式编程中,工作不是由组件主动去寻找,而是被推送到组件上。这与回调类似,但层次更高,抽象也更强大。响应式编程常常与函数式编程结合使用。
在这个练习中,我们会用到 RxJava,这是一个著名的响应式编程库,提供了 Java API。
这个练习模拟的场景,是一个接收两种输入的应用程序:
这两种输入都是通过 Observables 实现的,具体来说是用类 io.reactivex.Observable。
简单来说,你可以订阅一个Observable,对在某个地方产生的值做出“反应”。比如,当游戏引擎检测到新游戏开始时,就会推送新的单词;键盘事件则会产生字母输入。
不过,许多响应式框架都提供了强大的抽象,比如 map 可以改变收到的输入,或者 combine 可以把一个或多个Observable合并到一起。
Output 类是练习处理后的预期结果,它让前端可以显示游戏的完整状态,而无需前端自己做任何形式的存储,因此它也是函数式的。
在这个练习中,你需要想办法同时利用这两种输入,以Observable的形式生成这个输出。