-1

我很好奇我的游戏在功能风格而不是 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?
}

但不确定,因为没有经验丰富的功能编码器。我对接近该主题的每个答案都感兴趣(甚至可以是其他编程风格)。

4

1 回答 1

1

它可能看起来像这样:

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.

于 2012-06-20T10:22:15.210 回答