Java静态谓词命名约定

时间:2019-11-27 15:48:43

标签: java kotlin static predicate

比方说,我想在我的char hrs[0] = '\000' char hrs[1] = '4' char mins[0] = '\000' char mins[1] = '0' char secs[0] = '0' char secs[1] = '5' 助手类中编写isSubdirectory静态函数。该函数如下所示:

FileUtils

或者我可以翻转class FileUtils { public static boolean isSubdirectory(File child, File parent) { // ... } } parent参数:

child

我无法选择哪个顺序正确...

在Kotlin中不会有任何疑问:只需声明扩展功能:

class FileUtils {
  public static boolean isSubdirectory(File parent, File child) {
    // ...
  }
}

我着眼于Kotlin发明了助记符规则:静态函数中的第一个参数应被视为fun File.isSubdirectory(parent: File) { // ... } (我不是第一个发明此规则的人。我看到很多人也在使用它)。因此,在此示例中,我更喜欢将this作为第一个参数。

但是问题是:此规则是否已经正式化并且名称众所周知?我已经厌倦了向不知道该规则的人重复此规则,我希望我可以简单地用它的名字来指代此规则。

1 个答案:

答案 0 :(得分:2)

我不确定是否有名称或任何正式形式。充其量,让第一个参数看起来像this只是一种惯例。 尽管很罕见,“最后”约定仍然存在,在C和早期C ++中更常见(示例:具有fread / fwrite的stdio)

也存在基于参数类型的约定;例如,提升以下顺序:

  • 集合和具有通用参数的其他对象
  • 对象数组
  • 没有泛型的对象
  • 字符串
  • 原始类型的数组,例如byte[]
  • 双精度浮点数
  • 长,整数,短,字节
  • 布尔值

也存在或多或少的完全相反的顺序。其他约定也倾向于按参数类型对参数进行分组,而更倾向于使用method(String, String, int, int)而不是method(String, int, String, int)

如您所见,存在许多约定。我不确定它们中的任何一个都具有名称,并且真的比其他任何名称都使用得更多。 例如,这并不像camelCase vs. snake_case那样清晰,几乎没有人矛盾。

您可以避免的所有事情如下:将参数以对您而言最合乎逻辑和最直接的顺序排列。 最重要的是在整个项目中保持不变,例如,不要写isFileX(a,b),然后再写isFileY(b,a),例如,如果这两种方法在同一类中,那就不要说了。 如有疑问,请不要犹豫,问其他从事您项目的人,他们认为最好的是什么。

对于您的特定情况,由于“此第一”规则,将子对象放在第一位是合理的,但是将父对象放在第一位也是合理的,因为这也是GUI框架中的一种常见约定。 由您决定。