Java中布尔变量和方法的命名规范是什么?

12

我知道很多人建议这个规范:

boolean deleted;
boolean isDeleted();

但是,当你想给一个布尔值命名,表示用户可以离开时,该怎么办呢?

boolean userCanLeave
boolean isUserCanLeave()

boolean canUserLeave
boolean isCanUserLeave()

boolean userLeave
boolean isUserLeave()

boolean userLeave
boolean canUserLeave()

我不确定是否有任何标准,或者您只是采用您认为最易读的标准?这里有趣的是变量到getter方法名称的映射。


我不确定是否存在标准,还是根据自己判断哪个更易读?有趣的是这里涉及到变量与getter方法名称的映射。

@TimBiegeleisen 不,我认为那是不同的情况。 - Tn Hn
我认为这至少在某种程度上是相关的,因为某些基于Java的技术识别getter的isget形式。 - Tim Biegeleisen
3个回答

11

您应该使用更好的变量名称,例如userAllowedToLeave

然后,使用getter方法作为isUserAllowedToLeave()

这至少使用了“is” getter,并且听起来语法上也是正确的。


在某种程度上我同意你的观点,但你不认为这样会变得太啰嗦了吗?"AllowedTo"和前缀"is"有点重复。 "AllowedTo"只是让语法更易读而已。 - Tn Hn
@TnHn - 这可能听起来有些啰嗦,但它仍然非常易读和易于理解。 "allowed to" 的用处只是为了使名称在语法上正确。而且,你不应该在这种琐碎的情况下使用 enum;它只会增加代码的复杂性,难以理解和执行! - Am_I_Helpful

2
许多框架仍然使用方法调用来设置bean上的值,这些方法需要符合某种模式:

isXXXgetXXX

因此,即使我不使用框架来创建bean的实例,或者那些框架使用反射直接绑定到变量,我仍然坚持遵循这个模式。我认为这是一个好习惯。

所以,是getUserCanLeave()还是isUserLeavable()


2

像这样使用布尔值几乎总是一个糟糕和令人困惑的想法。如果您想使您的代码易于理解和维护,您应该使用枚举来表示状态,也许带有强制转移规则(FSM)。

假设您的“离开”概念基于用户是否完成了一项任务或一组任务,则您可能会有

public enum UserState { inProgress, complete }

您可以在用户类中实现一个名为leave的方法,示例如下:
public void leave() { if (state == UserState.complete) ... }

其中state是上面定义的枚举类型的一个私有实例。如果需要,您可以将问题重新定为isLeaveable以获取状态。当然,还需要一个complete()方法,该方法将适当地更改状态,并在用户完成任务时调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接