我很好奇我的游戏在功能风格上的样子而不是OOP。
以下是Node.js中的核心代码行:
if (!player.owns(flag) && player.near(flag) && flag.isUnlocked()) {
player.capture(flag);
}
我的猜测是,它看起来像这样:
var canCapture = [not(owns), isNear, canUnlock].every(function(cond) {
return cond(playerData, flagData);
});
if(canCapture) {
// how to capture?
}
但不确定,因为没有经验丰富的功能编码器。我对接近主题的每个答案感兴趣(甚至可以用其他编程风格)。
答案 0 :(得分:1)
看起来有点像这样:
if (!player.owns(flag) && player.near(flag) && flag.isUnlocked()) {
capturingPlayer = player.capture(flag);
}
其中capturingPlayer
是新对象,其与player
的区别在于捕获了一个标志。 player
的调用未对capture
进行修改。
如果您更喜欢“非OO”语法(无论可能意味着什么)
if (!owns(player, flag) && near(player, flag) && isUnlocked(flag)) {
capturingPlayer = capture(player, flag);
}
扩展并希望澄清一下:
在函数式编程社区所采用的意义上,函数式编程不只是意味着“函数/过程是第一类对象”。
所做的意味着函数是数学意义上的函数,即
因此,只要你的对象的方法都没有改变对象,你就不需要做太多的改变来编写“功能样式”。
编辑:
不幸的是,“功能性”和“面向对象”(特别是)都是非常不明确的概念 尝试找到“面向对象”的定义 - 至少有人试图定义它的定义 要了解函数式编程,请阅读John Hughes的Why functional programming matters,至少两次。