从可读性的角度来看,一个简单的问题,对于布尔方法,您更喜欢哪种方法名称:
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