【问题标题】:.Net Coding Standards Using a prefix "Is" or "Has" on Method Names.Net 编码标准在方法名称上使用前缀“Is”或“Has”
【发布时间】:2011-07-06 14:22:34
【问题描述】:

在创建返回布尔值的方法时,是否建议添加前缀“Is”或“Has”。我的感觉是这种做法更适合定义属性名称。

说,我们有一个像下面这样的方法有一些逻辑:

bool IsActivePage()  
{  
 // Some logic to determine if the page is active...   
}

最好将方法重命名为GetActivePageStatus,然后创建一个返回该方法结果的布尔属性IsActivePage

.NET 标准是什么?所有意见都将不胜感激?

【问题讨论】:

  • 我会使用 Is 用于固定字段,并使用 Has 或 Get 函数通过一些逻辑检查状态。
  • 你可以在这个的 BCL 中看到示例,虽然我不能临时想到无参数的示例。我想更多的是string.IsNullOrEmpty(string input);
  • 在方法名称中包含类型通常是一个危险信号。尽量避免这种情况,并创建一个 Page 类和 IsActive 是一个属性。

标签: c# .net coding-style


【解决方案1】:

Framework Design Guidelines 声明您应该“给出动词或动词短语的方法名称”,因为“通常方法作用于数据”。另一方面,属性应命名为“使用名词、名词短语或形容词”,并且“您也可以在布尔属性前加上 Is、Can 或 Has,但仅限于添加的位置价值”。

在这种情况下,您使用的是方法而不是属性,可能是因为它要么很昂贵,要么有一些副作用。我建议您选择能够最清楚地说明返回值所代表内容的名称。重要的是您要保持一致,并且不会让其他开发人员与您的约定混淆。

【讨论】:

  • 好点。但我会避免用形容词来命名属性。我只为接口保留它。
  • 请注意,BCL 经常违反此准则,尤其是在涉及 LINQ 时:XContainer.Elements(XName)(而不是 GetElements)、Enumerable.Range(Int32, Int32)(而不是 Enumerable.YieldRange)等。
【解决方案2】:

我会使用

bool IsActivePage
{
  get
  {
    // some logic
  }
}

如果该方法没有副作用并且价格便宜。

我认为没有必要为同一事物同时拥有方法和属性。

【讨论】:

    【解决方案3】:

    我投票支持您的解决方案:所以是的,对于方法,我个人认为,最好有 Get..Bla(),因为方法直观,至少对我而言,不仅仅是向我返回值的东西,但也会执行一些计算或调用其中的其他方法,而不是属性,只是返回值。

    “获取”这个词,对我个人而言,似乎是 DO SOMETHIGN+RETURN,

    而不是 "Is" :检查它是否存在。

    【讨论】:

      【解决方案4】:

      我认为两者都可以防御。关键是真正考虑这样的约定应该有多标准化。一般来说,你应该在你的团队或公司层面决定如何处理这样的案例,然后再保持一致。只要您和您的公司编写的代码对所有相关人员都清楚,这才是最重要的。

      【讨论】:

        【解决方案5】:

        我会说是的。所有方法都应该以 action 动词开头,以表明它们 某事。 IsHas 更适合属性。

        【讨论】:

        • :) 抱歉,我的意思是动作动词!
        【解决方案6】:

        首先,编码约定对于任何共享开发项目或任何您希望在您首次交付代码或将其设置一周后仍然存在的项目都至关重要。

        也就是说,互联网上有许多可用的 .Net 编码标准(Google 仍然是您的朋友),您应该尽可能遵守这些文件。一个例外是在混合语言环境中,其中不同的语言具有不同的样式约定,并且您希望创建一种涵盖所有这些语言的更通用的样式。在这种情况下,您应该创建一个样式文档并发布它。

        【讨论】:

          【解决方案7】:

          重命名会更好吗 GetActivePageStatus 的方法和 然后创建一个布尔属性 返回结果的 IsActivePage 那个方法。

          我可能不会走这条路。海事组织要么

          a) 逻辑很简单,放在属性getter里就可以了

          b) 逻辑不是很简单,你想把它放在一个方法中,但不要将它隐藏在一个属性中,在这个属性中,意外的调用者可能会因不当使用它而产生不必要的开销(即,如果存在显着开销,则不缓存该值在计算中)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多