它可能看起来像这样:
if (!player.owns(flag) && player.near(flag) && flag.isUnlocked()) {
capturingPlayer = player.capture(flag);
}
wherecapturingPlayer
是一个新对象,其不同之处player
在于它捕获了一个标志。player
没有被调用修改capture
。
如果您更喜欢“非 OO”语法(无论这意味着什么)
if (!owns(player, flag) && near(player, flag) && isUnlocked(flag)) {
capturingPlayer = capture(player, flag);
}
扩展并希望澄清一下:
在函数式编程社区所采用的意义上,函数式编程不仅仅意味着“函数/过程是一流的对象”。
它的意思是函数是数学意义上的函数,即
- 所有函数都返回一个值。
- 每个函数每次传递相同的参数时都返回相同的值。
- 函数没有任何副作用——没有可变对象或赋值。
所以,只要你的对象的方法没有改变对象,你就不需要做太多的改变来以“函数式”编程。
编辑:
Unfortunately both "functional" and "object-oriented" (in particular) are pretty ill-defined concepts.
Try and find a definition of "object-oriented" - there are at least as many definitions as there are people attempting to define it.
To get an understanding of functional programming, read Why functional programming matters by John Hughes, at least twice.