Java 静态谓词命名约定
Java static predicate naming convention
假设我想在 FileUtils
助手 class 中编写 isSubdirectory
静态函数。这个函数看起来像:
class FileUtils {
public static boolean isSubdirectory(File child, File parent) {
// ...
}
}
或者我可以翻转 parent
和 child
参数:
class FileUtils {
public static boolean isSubdirectory(File parent, File child) {
// ...
}
}
而且我无法选择哪个顺序是正确的...
在 Kotlin 中不会有任何疑问:只需声明扩展函数:
fun File.isSubdirectory(parent: File) {
// ...
}
着眼于kotlin,我发明了助记法则:静态函数中的第一个参数应该被认为是this
(我不是第一个发明这个法则的,我看到很多人也在用) .所以在这个例子中我更喜欢将 child
作为第一个参数。
但问题是:这个规则是否已经正式化并且有一个众所周知的名字?我已经厌倦了向不知道它的人重复这条规则,我希望我可以简单地通过它的名字来引用这条规则。
我不确定是否有名称或任何真正的形式化。充其量,让第一个参数看起来像 this
只是一种常见的约定。
虽然最罕见,但 "this last" 约定也存在,在 C 和早期的 C++ 中更多(例如:stdio with fread/fwrite)
也存在基于参数类型的约定;例如推广以下订单:
- 集合和其他 objects 具有通用参数
- objects
的数组
- Objects 没有泛型
- 字符串
- 基本类型的数组,例如
byte[]
- 双精度浮点数
- 长整型、短整型、字节
- 布尔值
也存在或多或少完全相反的顺序。其他约定也倾向于按类型对参数进行分组,更喜欢 method(String, String, int, int)
而不是 method(String, int, String, int)
.
如您所见,存在许多约定。我不确定它们中的任何一个都有名字,而且确实比其他任何一个都更常用。
例如,它不像驼峰式 vs. snake_case 那样清楚,几乎没有人反驳。
您可以避免的是:将论点按照您认为最合乎逻辑和最直接的顺序排列。
最重要的是在整个项目中保持一致,即不要先写 isFileX(a,b)
然后再写 isFileY(b,a)
,如果两个方法在同一个 class 中就更不用说了。
如有疑问,请毫不犹豫地询问从事您项目的其他人,他们认为什么是最好的。
对于您的特定情况,由于 "this first" 规则,将 child 放在首位是合理的,但将 parent 放在首位也是合理的,因为这也是一种常见的约定例如在 GUI 框架中。
由您决定。
假设我想在 FileUtils
助手 class 中编写 isSubdirectory
静态函数。这个函数看起来像:
class FileUtils {
public static boolean isSubdirectory(File child, File parent) {
// ...
}
}
或者我可以翻转 parent
和 child
参数:
class FileUtils {
public static boolean isSubdirectory(File parent, File child) {
// ...
}
}
而且我无法选择哪个顺序是正确的...
在 Kotlin 中不会有任何疑问:只需声明扩展函数:
fun File.isSubdirectory(parent: File) {
// ...
}
着眼于kotlin,我发明了助记法则:静态函数中的第一个参数应该被认为是this
(我不是第一个发明这个法则的,我看到很多人也在用) .所以在这个例子中我更喜欢将 child
作为第一个参数。
但问题是:这个规则是否已经正式化并且有一个众所周知的名字?我已经厌倦了向不知道它的人重复这条规则,我希望我可以简单地通过它的名字来引用这条规则。
我不确定是否有名称或任何真正的形式化。充其量,让第一个参数看起来像 this
只是一种常见的约定。
虽然最罕见,但 "this last" 约定也存在,在 C 和早期的 C++ 中更多(例如:stdio with fread/fwrite)
也存在基于参数类型的约定;例如推广以下订单:
- 集合和其他 objects 具有通用参数
- objects 的数组
- Objects 没有泛型
- 字符串
- 基本类型的数组,例如
byte[]
- 双精度浮点数
- 长整型、短整型、字节
- 布尔值
也存在或多或少完全相反的顺序。其他约定也倾向于按类型对参数进行分组,更喜欢 method(String, String, int, int)
而不是 method(String, int, String, int)
.
如您所见,存在许多约定。我不确定它们中的任何一个都有名字,而且确实比其他任何一个都更常用。 例如,它不像驼峰式 vs. snake_case 那样清楚,几乎没有人反驳。
您可以避免的是:将论点按照您认为最合乎逻辑和最直接的顺序排列。
最重要的是在整个项目中保持一致,即不要先写 isFileX(a,b)
然后再写 isFileY(b,a)
,如果两个方法在同一个 class 中就更不用说了。
如有疑问,请毫不犹豫地询问从事您项目的其他人,他们认为什么是最好的。
对于您的特定情况,由于 "this first" 规则,将 child 放在首位是合理的,但将 parent 放在首位也是合理的,因为这也是一种常见的约定例如在 GUI 框架中。 由您决定。