Java 静态谓词命名约定

标签 java kotlin static predicate

假设我想在我的 FileUtils 辅助类中编写 isSubdirectory 静态函数。这个函数看起来像:

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

或者我可以翻转parentchild参数:

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

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

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

fun File.isSubdirectory(parent: File) {
  // ...
}

着眼于kotlin,我发明了助记符规则:静态函数中的第一个参数应该被视为this(我不是第一个发明这个规则的人。我看到很多人也在使用它)。因此,在这个示例中,我更愿意将 child 作为第一个参数。

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

最佳答案

我不确定是否有名称或任何真正的形式化。充其量,第一个参数类似于 this 只是一种常见约定。 尽管最罕见,但“最后一个”约定也存在,更多地出现在 C 和早期 C++ 中(示例:带有 fread/fwrite 的 stdio)

还存在基于参数类型的约定;例如推广以下订单:

  • 具有通用参数的集合和其他对象
  • 对象数组
  • 没有泛型的对象
  • 字符串
  • 原始类型数组,例如字节[]
  • double 、 float
  • 长整型、短整型、字节
  • boolean 值

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

正如您所看到的,存在很多约定。我不确定它们中的任何一个都有名字,而且其中任何一个确实比其他任何一个都更常用。 它不像camelCase 与snake_case 那样清晰,几乎没有人反对。

您可以避免的事情如下:按照您认为最合乎逻辑和最直接的顺序排列参数。 最重要的是保持整个项目的一致性,即不要先写 isFileX(a,b) 然后写 isFileY(b,a) 例如,更不用说如果这两个方法在同一个类中。 如有疑问,请随时询问参与您项目的其他人,他们认为什么是最好的。

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

关于Java 静态谓词命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59073888/

相关文章:

java - 如何使用正则表达式递归匹配模式?

gradle - 如何在 Gradle 中设置 Kotlin 源编码?

php - 无需更改数千行代码即可创建静态数组

android - 有没有办法使用 PagingDataAdapter 找到项目并滚动到该 View ?

c - C 中的 static 关键字和外部变量

c++ - 在 C++ 中使用没有对象的字符串变量调用静态类结构

java - 使用 Zookeeper/Hadoop 进行分布式事务内存?

java - Android - Accesstoken 错误 facebook

java - 通过 weblogic 识别谁在使用证书

android-kotlin 错误 : unresolved reference databinding & ActivityMainBinding