【问题标题】:Variable and method naming conventions for boolean verbs in Java? [duplicate]Java中布尔动词的变量和方法命名约定? [复制]
【发布时间】:2016-10-31 09:53:32
【问题描述】:

我知道很多人建议采用这种约定:

boolean deleted;
boolean isDeleted();

但是当你想命名一个布尔值来表示用户可以离开时,你会怎么做?

boolean userCanLeave
boolean isUserCanLeave()

boolean canUserLeave
boolean isCanUserLeave()

boolean userLeave
boolean isUserLeave()

boolean userLeave
boolean canUserLeave()

我不确定这是否有任何标准,还是您只选择您认为最易读的标准?这里有趣的是获取方法名称映射的变量。

【问题讨论】:

  • @TimBiegeleisen 不,我认为这是一个不同的场景。
  • 不,我认为至少部分相关,因为某些基于 Java 的技术可以识别 isget 形式的 getter。

标签: java variables naming


【解决方案1】:

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

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

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

【讨论】:

  • 在某种程度上我同意你的看法,但你不觉得它太冗长了吗? “AllowedTo”和前缀“is”做同样的事情。 “AllowedTo”只是让它在语法上更具可读性。
  • @TnHn - 这听起来可能很冗长,但它仍然非常易读且易于理解。 “允许”的用处只是使名称在语法上正确。而且,你不应该在这种琐碎的情况下使用enum;它只会增加代码的复杂性,难以理解和执行!
【解决方案2】:

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

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

public enum UserState { inProgress, complete }

然后你可以像这样在你的用户类上实现一个方法leave

public void leave() { if (state == UserState.complete) ... }

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

【讨论】:

    【解决方案3】:

    许多框架仍然使用方法调用来设置 bean 的值,并且这些方法需要符合一定的模式:

    isXXXgetXXX

    所以我尝试坚持这一点,即使我没有使用框架来创建 bean 的实例,或者如果这些框架使用反射直接绑定到变量。我仍然认为这是一种很好的做法。

    那么getUserCanLeave()?还是isUserLeavable()

    【讨论】:

      猜你喜欢
      • 2012-08-10
      • 1970-01-01
      • 2011-04-21
      • 2011-06-24
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多