How should I name my class, functions, member variables and static variables?
有些人可能认为这个问题是主观的。但是,我觉得这是要告诉程序员的最重要的事情之一。
这是检查空值的好函数名吗?
1 2 3 | 1. checkNull() 2. notNull() 3. isNull() |
如果我写
1 | checkIfNull() |
我不知道有多少人和我有同样的感觉,我花了更多的时间来为我的职能想好名字,而不是写一个。
人们怎么看待好名字?命名可以跨语言一致(主要是C++和Java)
更新:正如我所说,到目前为止,大多数人更喜欢isNull()。如何确定isNull()是完美名称。
1 | checkNotNull() // throw exception if Null |
这是个好名字吗?是否每个人都依靠自己的直觉来决定一个名字?
问题是选择一个完美的名字!!!!如果函数抛出了一个异常,如果它是空的,那么它应该被称为
和其他人一样,我更喜欢isull()(或者isull(),这取决于您的语言/编码约定)。
为什么?除此之外,这是一个被广泛接受的惯例,当您阅读代码时听起来很好:
1 2 3 | if (isNull()) // or if (foo.isInitialized()) |
等等。几乎是自然的英语…:-)与备选方案进行比较!像iwerner一样,我将避免使用负形式来创建标识符(变量、方法)名称。另一个常见的约定是用动词开始方法/函数名。现在,Sun在Java的早期没有这样的约定(因此,例如,长度()和siz()方法,但是它甚至不喜欢这些旧名称,而有利于动词规则。
IsNull可能是一个坏例子,因为:
1 2 | Object foo = null; if (foo.isNull()) { // Causes a NullPointerException in Java. } |
否则,您将得到:
1 2 | Object foo = null; if (UtilityClass.isNull(foo) { } |
这似乎比仅仅做更难,更不清楚:
1 2 | Object foo = null; if (foo == null) { } |
答案取决于方法返回的内容。如果它返回一个指示对象是否为空的bool,我会将其命名为isull(thing thing),因为它是最不含糊的公式——方法的作用和返回的内容立即显而易见。如果方法是void,但如果对象为空则抛出,我将调用它guardagainstnull(),或者沿着这些行调用它。imo,checknull()有点模棱两可——通过查看方法,您不知道它是否应该返回bool或throw,或者bool确切表示什么。
isNull()是一个不错的选择,但它还应该返回bool。
这样,您就可以在if语句中检查它的值,而不会得到任何nullreference异常。
现在,强烈建议使用JavaBeans约定:
1 2 | isNull() //if the return type is a primitive getNull() //if the return type is an object (Like Boolean in java) |
对于非布尔类型的访问成员,应该使用get。对于静态变量成员,使用camel大小写样式:"myvar"。对于类名,使用第一个字母大写的驼色大小写样式:"MyClass"。对于常量成员,使用带下划线的大写字母作为分隔符:"my_constant"。
我找到了这篇文章。想和你们分享!
如果您在代码中进行了大量的空检查,我认为有一对方法,即:
1 2 3 | IsNull() IsNotNull() |
从长远来看,将导致最可读的代码。
我知道!isNull()是大括号语言中的一个标准习惯用法,但我认为它比isNotNull要清楚得多。
很容易忽略那个单曲"!"性格,特别是如果它被隐藏在一个更复杂的表达中。
我个人会用
1 | IsNull() |
我更喜欢
要学习好的命名风格,请学习标准库(PHP除外)。您应该遵循每种语言中标准库使用的样式。
对于C,研究框架设计指南。
我将使用isNull();在.NET中有一个优先级,该优先级对于字符串类型具有静态isNullOrEmpty()方法。"是返回bool的方法的首选前缀。我不会有一个否定的方法"notnull",因为这太容易导致双重否定。相反,对正方法使用否定运算,例如!ISNULL()
但是,只检查空值的方法可能会使事情过于复杂;出了什么问题
x=空
我认为它比
IsNull(X)
大多数看到is null(x)的开发人员都会怀疑isnull方法中是否存在一些特殊的空检查;如果没有,则"x==null"可能更好。
如果您的公司没有在其编码标准中指定命名约定,我建议您现在添加它们。
我们公司的Java编码标准是以官方Java编码标准为基础的,我认为,它指定的名称像EDCOX1(1)。
从你的例子来看,
它可能会因你使用的语言不同而有所不同-你在这个问题上标记了一对夫妇。重要的是要与您所编码的语言/库的标准保持一致。是的,命名约定非常重要![上面甚至有一个维基百科条目:http://en.wikipedia.org/wiki/naming_conventions_28programming%29]
对于.NET,我在命名约定中找到了这个"备忘单":
http://www.irtizedbynary.com/programming/standards.aspx
对于你在C中的例子,我建议: