单参数方法命名:方法名称

时间:2015-07-17 22:00:02

标签: java naming-conventions method-names

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

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

所以,我的问题是:命名方法不是更好: isMocked(玩家) 而不是重复单词" Player"很多次? 任何官方指导? 我意识到这样的重复对于制定者来说是必不可少的,但对于上述其他情况并不确定。

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

2 个答案:

答案 0 :(得分:2)

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

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

player.isMocked()似乎比someOtherService.isMockedPlayer(player)更自然。

如果Playerenum,那么它的目的就会失败,因为MOCKED是公开的。

另一方面,如果Player是一个实际的类,如果MOCKED是您维护的内部静态实例,那么您可以如上所述实现isMocked()并且您不会甚至不得不向外界揭露MOCKED

  

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

嗯,这取决于。选择至少是一个命名约定:

  • 自然
  • 并不奇怪
  • 没有混淆
  • 尽可能简洁

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

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

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

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

<强> TL;博士取决于;但一般来说,选择一个名称可以传达有关操作语义和上下文的准确信息,而不会造成冗余或冗长。

答案 1 :(得分:0)

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

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