假设我要isSubdirectory
在FileUtils
辅助程序类中编写静态函数。该函数如下所示:
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
。尽管最稀有,“最后”约定也存在,在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)
例如算一个Fortiori。如有疑问,请不要犹豫,问其他从事您项目的人,他们认为最好的是什么。
对于您的特殊情况,由于“ this first”规则,将孩子放在第一位是合理的,但是将父对象放在第一位也是合理的,因为这也是GUI框架中的一种常见约定。由您决定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句