Java 静态谓词命名约定



假设我想在我的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(

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

  • 具有泛型参数的集合和其他对象
  • 对象数组
  • 没有泛型的对象
  • 字符串
  • 基元类型的数组,例如byte[]
  • 双,浮子
  • 长、整、短、字节
  • 布尔

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

如您所见,存在很多约定。我不确定它们中的任何一个都有名字,而且它们真的比其他任何名称都多得多。 例如,它不像骆驼与snake_case那样清楚,几乎没有人反驳。

你可以从以下所有事情中保留:将参数放在你看来最合乎逻辑和最直接的顺序。 最重要的是保持包含在整个项目中,即不要编写isFileX(a,b)然后isFileY(b,a)例如,如果两个方法在同一个类中,则更是如此。 如有疑问,请随时询问从事您项目的其他人他们认为什么是最好的。

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

最新更新