1

有时我们需要创建一个只有一个参数的简单方法。例如:

private boolean isMockedPlayer(Player player) {
    return player == Player.MOCKED;
}

所以,我的问题是:命名方法不是更好吗:isMocked(Player player) 而不是多次重复单词“Player”?有官方指导吗?我意识到这种重复对于二传手来说是必不可少的,但对于上述其他情况则不确定。

编辑:嗯,一个例子可能不是最好的。但问题不是关于这段代码片段,而是关于一般原则 - 我们是否应该在方法名称中重复参数类型?

4

2 回答 2

2

为什么不在Player实例本身上有它?

public boolean isMocked() {
    return this == Player.MOCKED;
}

player.isMocked()似乎比someOtherService.isMockedPlayer(player).

Player虽然 if是 a ,但它确实有点破坏了目的enum,因为 thenMOCKED是公开的。

另一方面,如果 ifPlayer是一个实际的类并且 ifMOCKED是您维护的内部静态实例,那么您可以isMocked()按上述方式实现,您甚至不必向MOCKED外界公开。

但关于一般原则 - 我们是否应该在方法名称中重复参数类型?

这得看情况。至少选择一个命名约定:

  • 自然
  • 不奇怪
  • 不混乱
  • 尽可能简洁

您希望清楚地传达您正在执行的操作的上下文和含义。

我认为您的示例本身有点多余,因为您正在检查实例的状态。因此,在这种情况下,将方法作为实例本身的一部分更有意义。但是一个更好的例子可能是一个类上的一个方法,它接受一个与类本身相同类型的参数。例如:

public void merge(BinarySearchTree tree) {
    ...
}

在这种情况下,不需要调用该方法mergeBinarySearchTreebst.mergeBinarySearchTree(other)不传达任何比 更多的信息bst.merge(other)。但即便如此,您也不能将此作为硬性规定。也许您的对象有许多不同类型的merge操作,它们都接受不同的东西。在这种情况下,让方法包含要合并的事物的名称可能是有意义的……但这也可能取决于您如何设计对象模型。

tl; 博士这取决于;但一般来说,选择一个能够传达有关操作的语义和上下文的准确信息的名称,而不是不必要的冗余或冗长。

于 2015-07-17T22:36:21.310 回答
0

我认为您在命名此方法时遇到了麻烦,因为它没有做任何有用的事情。它只是进行比较,只需要比方法调用更多的代码。将 isMocked() 方法添加到 Player 枚举本身可能很有用。“player == MOCKED”和“player.isMocked()”之间没有太大区别,但如果有几种类型的mocked player,它会很有用。

顺便说一句,如果您必须检查对象是否被模拟,我认为可能存在设计问题。模拟的想法是代替真实对象来验证交互。如果您在模拟时修改交互,您在验证什么?

于 2015-07-17T22:38:58.820 回答