【问题标题】:What's a good naming convention for large-scope function variables?大范围函数变量的良好命名约定是什么?
【发布时间】:2008-09-30 03:00:08
【问题描述】:

您可以对类成员、静态对象、全局对象和结构有不同的命名约定。其中一些示例如下。

_member
m_member

或者在Java的情况下,this.member的用法。

但是对于函数变量范围,是否有任何好的技术或命名约定来传达单个变量具有完整的函数范围或短的生命周期范围?

void MyFunction()
{
  int functionScopeVariable;

  if(true)
  {
    //no need for function variable scope naming convention
  }
}

【问题讨论】:

  • 是的,因此对于您的示例,如果 var 的范围仅包含在 MyFunction() 中,我们的约定是命名您的 var l_functionScopeVar... 我注意到它可以更轻松地阅读带有前缀的其他人的代码,即使它们只是本地临时变量......

标签: variables naming


【解决方案1】:

我实际上鼓励将此任务委托给您使用的 IDE/编辑器。

不,我实际上不是在谈论命名变量,这仍然最好由人类完成。但此类命名策略的基本任务是向您展示任何一个名称代表哪种类型的变量。

几乎每个称职的 IDE 都可以为不同的变量类型(实例成员、静态成员、参数、局部变量……)定义不同的样式(颜色、字体、字体类型……),因此让 IDE告诉你它实际上是什么类型的变量,让你不必每次都输入那些(否则无用的)前缀或后缀。

所以我的建议是:使用有意义的名称,不带任何前缀或后缀。

【讨论】:

  • 有些工具(你的 VCS、diff、你的代码审查系统)可能不具备你所有花哨的 IDE 功能,因此还要权衡将范围信息放入变量名的成本。此外,团队越大,有人使用 Vim 的可能性就越大(尽管他们可能习惯于处理生活给他们的事情:)
【解决方案2】:

一种方法是遵循变量的范围越大,名称越长的准则。通过这种方式,全局变量可以获得长描述性名称,而循环索引变量等范围有限的东西可以小到单个字母。

【讨论】:

  • 我很自然地这样做,直到现在才注意到它。 +1
【解决方案3】:

我对全局变量、静态变量和成员变量使用前缀或特殊命名约定,因此我不必对局部变量使用前缀。我更喜欢使用短的局部变量名,尤其是循环变量。

【讨论】:

    【解决方案4】:

    有一个论点是你不应该有“大范围函数”,所以命名不应该有问题 - 只需使用“小范围函数”变量命名约定。

    【讨论】:

      【解决方案5】:

      来自 MSFT 和其他私有实例字段样式指南的指南是 _memberName(以“_"”为前缀的驼峰式表示法)。这也是最近许多 Microsoft 教程的源代码中使用的约定。

      我使用它是因为它更短,而不是匈牙利语,并且 R# 支持它作为私有实例字段的默认规则。

      我也喜欢它,因为它在某种程度上掩盖了 Intellisense 的私有字段,因为您应该更喜欢首先访问您的公共成员。如果我想访问属性名称并开始输入“Na”,第一个建议是使用 Pascal 大小写的公共实例属性名称。在极少数情况下,我想直接访问私有字段,这迫使我有意识地决定开始输入“_”,然后我会在 Intellisense 弹出窗口中获得我的私有字段的完整列表。

      我还看到指导说它应该是 _MemberName,如果它是名为 MemberName 的公共属性的支持字段(以“_”为前缀的 Pascal 大小写表示法)我个人不喜欢这样,因为我认为大写 M 是多余的,增加了不必要的击键,并且没有添加任何额外的信息。

      【讨论】:

        【解决方案6】:

        我们倾向于在函数中使用 l_ 前缀来表示“本地”。而且,效果很好。

        【讨论】:

        • 所以你的意思是,对于示例函数参数具有函数范围的变量,在它们的开头附加一个“l_”。只是为了澄清?
        【解决方案7】:

        这一切都归结为语言的风格指南是否建议。

        【讨论】:

          【解决方案8】:

          我想任何东西都可以,只要它传达了有关其使用的含义。

          【讨论】:

            【解决方案9】:

            我更喜欢保持简单,我使用:

             m_varname - Class member variables
             g_varname - Global variables
            

            【讨论】:

            • 是的,我明白了。但是如果函数变量在 if 语句中具有完整的函数作用域或有限的作用域呢?
            • 我不区分它们,而且我从来没有在函数作用域和有限作用域中使用相同的 var 名称,这往往会使事情变得过于混乱。
            【解决方案10】:

            我使用与班级成员相同的约定。 IDE 应该负责查找您的声明。如果一个函数如此庞大和令人困惑以至于它成为一个问题,那么需要解决一个更大的问题。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-01-06
              • 2022-01-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多