【问题标题】:Naming Conventions: What to name a boolean variable? [closed]命名约定:如何命名布尔变量? [关闭]
【发布时间】:2009-08-04 14:57:29
【问题描述】:

我需要一个好的变量名作为布尔值,当对象是列表中的最后一个对象时返回 false。

我能想出的唯一合适的名字是“inFront”,但我认为这还不够描述性。

另一个选择是“isNotLast”。虽然这不是一个好的做法(代码完成,第 269 页,使用正布尔变量名称)。

我知道我可以更改变量定义。所以当一个对象是最后一个对象并调用变量'isLast'时返回true,但是,如果我有第一个解释,它会使这个任务更容易。

【问题讨论】:

  • 发布一些代码怎么样?变量需要上下文
  • 如果您更改名称,您正在治疗症状。这个问题的根本原因是负逻辑。
  • hasPredecessor/hasSuccessor 表示是否有任何项目在当前项目之前/之后?如果(item.hasSuccessor){等等等等等等}
  • 我们不能命名它bool?

标签: coding-style naming-conventions


【解决方案1】:
isBeforeTheLastItem

isInFrontOfTheLastItem

isTowardsTheFrontOfTheList

也许太罗嗦了,但它们可能会帮助你提供想法。

【讨论】:

  • 我想我在'isBeforeLast'上被卖掉了...duh
  • 不能用isBeforeLast替换!isLast吗?
  • 如果之后可以有元素“Last”,那为什么叫“Last”呢?
  • @Thunder – shouldDisplay
  • 复数情况如何?它应该以“是”开头吗?例如areAnimalsAllowed?在占有的情况下?它应该以“有/有”开头吗?例如hasAnimals?
【解决方案2】:

我的投票是将其命名为 IsLast 并更改功能。如果这不是一个真正的选择,我会将名称保留为 IsNotLast。

我同意 Code Complete(使用正布尔变量名称),我也相信规则是用来打破的。关键是只有在绝对需要时才打破它们。在这种情况下,没有一个替代名称像“破坏”规则的名称那样清晰。因此,这是可以打破规则的时候之一。

【讨论】:

  • 让它更直观:if (isLast) {…} …或者如果它必须被倒置(我首选的保持正名的方式) if (!isLast) {…}
【解决方案3】:

有FollowingItems?或 hasFollowingXXXXs,其中 XXXX 是您列表中的任何项目?

【讨论】:

  • 我是这么想的。 hasNext 可能会起作用。
【解决方案4】:

就我个人而言,最重要的是我会更改逻辑,或者查看业务规则,看看它们是否规定了任何潜在的命名。

因为,切换布尔值的实际条件实际上是“最后”的行为。我会说切换逻辑并将其命名为“IsLastItem”或类似名称将是更可取的方法。

【讨论】:

  • +1。如果我没记错的话,这也是 Code Complete 中那部分的精神。
【解决方案5】:

isPenultimateOrPrior

isBeforeEnd

【讨论】:

    【解决方案6】:

    Haskell 使用init 来引用列表中除了最后一个元素之外的所有元素(基本上是tail 的倒数); isInInit 会起作用,还是太不透明了?

    【讨论】:

    • 太不透明了。任何不了解 Haskell 的人都会感到困惑。
    • matlab和octave使用end指定最后一项
    【解决方案7】:

    怎么样:

     hasSiblings
     or isFollowedBySiblings (or isFolloedByItems, or isFollowedByOtherItems etc.)
     or moreItems
    

    虽然我认为即使你不应该养成打破“规则”的习惯,但有时完成某事的最佳方法可能是打破规则(代码完整指南),在你的情况下,命名变量 isNotLast

    【讨论】:

    • 兄弟姐妹是与另一个兄弟姐妹有共同父母的事物。平面列表中没有父母。
    • @John Topley:是的,我想你是对的,但你可能会争辩说列表中的所有项目都是兄弟姐妹,而他们的父母就是列表本身。我猜 isFollowedBySiblings 可以重命名为像 isFollowedByItems 或 byOtherItems 或 byMoreItems 或其他东西。我仍然觉得 isNotLast 是更好的名称,除非他可以将标志的含义更改为相反的然后调用它:isLast(哇.. 好长 :)
    • 似乎stackoverflow不鼓励编辑错别字的帖子,因为编辑需要6个字符或更多?
    【解决方案8】:

    一个简单的语义名称是last。这将允许代码始终为正代码,例如:

    if (item.last)
        ...
    
    do {
       ...
    } until (item.last);
    

    【讨论】:

      【解决方案9】:

      需要考虑的两个问题

      1. 变量的作用域是什么(换句话说:你说的是局部变量还是字段?)? 与字段相比,局部变量的范围更窄。特别是,如果变量在相对较短的方法中使用,我不会太在意它的名称。当范围很大时,命名更重要。

      2. 我认为您处理此变量的方式存在内在冲突。一方面,您说“当对象是列表中的最后一个对象时为假”,另一方面,您还想将其称为“inFront”。一个在列表中(不是)最后的对象不会让我觉得(不是)在前面。我会选择 isLast。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-10
        • 2014-10-27
        • 1970-01-01
        • 2016-08-31
        • 2018-08-31
        • 2016-12-25
        • 1970-01-01
        相关资源
        最近更新 更多