繁体   English   中英

Java 静态谓词命名约定

[英]Java static predicate naming convention

比方说,我想写isSubdirectory静电功能在我的FileUtils的辅助类。 这个函数看起来像:

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++ 中(例如:stdio with fread/fwrite)

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM