从可读性的角度来看,一个简单的问题,对于布尔方法,您更喜欢哪种方法名称:
public boolean isUserExist(...)
要么:
public boolean doesUserExist(...)
要么:
public boolean userExists(...)
getUserExistence,userIsNotExtinct,userHasExistentialState等...
从可读性的角度来看,一个简单的问题,对于布尔方法,您更喜欢哪种方法名称:
public boolean isUserExist(...)
要么:
public boolean doesUserExist(...)
要么:
public boolean userExists(...)
getUserExistence,userIsNotExtinct,userHasExistentialState等...
Answers:
public boolean userExists(...)
是我的首选。因为它使您的条件检查更像自然英语:
if userExists ...
但我想这没有硬性规定-保持一致
if呢?如果它们有副作用,那就更有气味了。if IsUserExisting()并且if DoesUserExist()看起来可怕,应该避免。
userExists,您将声明什么变量名称?userExists对变量有益,对方法不利。正如@Oskar所写-听起来像是声明,不是问题。
在追求可读性的同时提防牺牲清晰度。
尽管if (user.ExistsInDatabase(db))读起来比更好if (user.CheckExistsInDatabase(db)),但请考虑具有构建器模式的类(或任何可以设置状态的类)的情况:
user.WithName("Mike").ExistsInDatabase(db).ExistsInDatabase(db2).Build();
目前尚不清楚是否ExistsInDatabase在检查它是否存在,或设置它确实存在的事实。您不会编写if (user.Age())或if (user.Name())没有任何比较值,那么为什么if (user.Exists())纯粹是个好主意,因为该属性/函数为布尔型,并且您可以重命名该函数/属性以使其更像自然英语?遵循我们用于布尔类型以外的其他类型的相同模式是否很糟糕?
对于其他类型,一条if语句将函数的返回值与代码中的值进行比较,因此代码如下所示:
if (user.GetAge() >= 18) ...
读为“如果用户点获取年龄大于或等于18 ...”,是的-不是“自然英语”,但我认为它object.verb永远不会像自然英语,这只是现代编程的基本方面(对于许多主流语言)。程序员通常在理解以上语句时没有问题,因此以下语句会更糟吗?
if (user.CheckExists() == true)
通常缩短到
if (user.CheckExists())
紧接着致命的一步
if (user.Exists())
虽然已经说过“代码被读取的频率比书面被读取的频率高10倍”,但是很容易发现错误也很重要。假设您有一个名为Exists()的函数,该函数导致对象存在,并根据成功返回true / false。您可以轻松地看到代码,if (user.Exists())而不会发现错误- if (user.SetExists())例如,如果阅读代码,该错误将更加明显。
此外,user.Exists()可以轻松包含复杂或效率低下的代码,往返于数据库以检查某些内容。user.CheckExists()清楚地表明该函数执行了某些操作。
另请参见此处的所有响应:命名约定:命名返回布尔值的方法的名称是什么?
作为最后的注释-在“告诉不问”之后,许多返回true / false的函数无论如何都会消失,并且告诉对象做某事,而不是向对象询问其状态,可以用不同的方法来做根据其状态的方式。
Suppose you had a function called Exists() which causes the object to exist这已经是一个问题。这种方法应该是动词,例如Create。至少应该是Exist,但是很少使用“存在”作为动词。 It's not clear if ExistsInDatabase is checking whether it does exist, or setting the fact that it does exist.很清楚 我可以断言,如果这样做除了返回布尔值之外,其他任何开发人员都会感到惊讶。
Most developers是您在此处句子的关键。我要说的all developers是,如果CheckExists()除了检查某物之外还进行其他任何操作,将会感到惊讶。这不是Exists()一个糟糕的名字,而是CheckExists()一个更好的名字,这个问题作为一个总的原则在问,最好的命名方式是什么?答案是将其像其他函数一样对待,以动词开头名称,不要仅仅因为它返回布尔值就使用其他模式。
我认为有些事情我想被其他一些答案遗漏了
这取决于这是C ++类方法还是C函数。如果这是一个方法,那么它可能会被称为if (user.exists()) { ... }或if (user.isExisting()) { ... }
没有if (user_exists(&user))。这就是编码标准中规定bool方法应以动词开头的原因,因为当对象在它们前面时,它们将像句子一样读取。
不幸的是,许多旧的C函数成功返回0,失败返回非零,因此,除非您遵循所有布尔函数以动词开头或始终将其与true相比,否则很难确定所使用的样式。 if (true == user_exists(&user))
那么为什么不重命名该属性呢?
if (user.isPresent()) {
isBabbyFormed