java - 单参数方法命名: repeat paramter in method name

标签 java naming-conventions method-names

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

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

所以,我的问题是:命名方法不是更好吗: isMocked(玩家玩家) 而不是多次重复“玩家”这个词? 有官方指导吗? 我意识到这种重复对于设置者来说是必要的,但对于上面的其他情况则不确定。

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

最佳答案

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

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

player.isMocked() 看起来比 someOtherService.isMockedPlayer(player) 更自然。

如果Player是一个enum,它确实有点违背了目的,因为MOCKED是公开的。

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

but about general principle - should we repeat parameter type in method name or not?

嗯,这要看情况。选择至少以下的命名约定:

  • 自然
  • 不足为奇
  • 不困惑
  • 尽可能简洁

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

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

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

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

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

关于java - 单参数方法命名: repeat paramter in method name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31485353/

相关文章:

maven - 关于MavenartifactID的命名约定的最佳实践(有限制吗?)

swift - Swift 与 Objective-C 中的命名方法

java - 如何使用 ElasticSearch 获得 0 到 1 之间的分数?

javascript - JavaScript 中的 jsp 标签

java - 如何使用 ScrollTable 实现自定义 ColumnSorter(GWT 孵化器)

objective-c - Objective-C 中参数的命名约定

java - 在 Firebase 群发消息应用中实现阅读回执功能

c# - 枚举命名约定 - 复数

programming-languages - 在函数名中使用特殊字符

oop - 错误的方法名称及其对代码结构的说明