【问题标题】:Is there a concise catalog of variable naming-conventions?是否有变量命名约定的简明目录?
【发布时间】:2010-09-19 03:17:03
【问题描述】:

这些年来我遇到过许多不同风格的变量名。

目前关于命名约定的维基百科条目相当简单......

我希望看到一份简明的变量命名约定目录,通过名称/描述来识别它,以及一些示例。

如果某个约定特别受到某个平台社区的青睐,那也值得一提。

我将把它变成一个社区维基,所以请为每个约定创建一个答案,并根据需要进行编辑。

【问题讨论】:

  • 可能没有一个已经存在,因为不同的语言允许不同的模式作为变量名。但这不应该阻止我们在这里制作一个。

标签: variables dictionary naming-conventions naming catalog


【解决方案1】:

我见过的最好的命名约定集在“Code Complete”一书中,Steve McConnell 中有一个关于命名约定和大量示例的精彩部分。他的示例贯穿了针对不同语言的许多“最佳实践”,但最终由开发人员、开发经理或架构师来决定具体操作。

【讨论】:

    【解决方案2】:

    PEP8 是 Python 代码的样式指南,是标准库的一部分,在 Python 社区中比较有影响力。对于加分点,除了涵盖 Python 标准库使用的命名约定外,它还提供了一般命名约定的概述。

    根据PEP8:标准库中的变量、实例变量、函数和方法应该使用下划线分隔的小写单词以提高可读性:

    foo
    parse_foo
    a_long_descriptive_name
    

    要区分名称和保留字,请附加下划线:

    in_
    and_
    or_
    

    弱私有的名称(不是由'from M import *'导入的)以下划线开头。通过名称修改强制执行隐私的名称以双下划线开头。:

    _some_what_private
    __a_slightly_more_private_name
    

    Python“特殊”方法的名称以双下划线开头和结尾:

    __hash__  # hash(o) = o.__hash__()
    __str__   # str(o) = o.__str__()
    

    【讨论】:

      【解决方案3】:

      Sun 发布了 Java here 的变量名称约定列表。该列表包括命名包、类、接口、方法、变量和常量的约定。

      变量状态部分

      除变量外,所有实例、类和类常量都是大小写混合,首字母小写。内部单词以大写字母开头。变量名称不应以下划线 _ 或美元符号 $ 字符开头,即使两者都允许。

      变量名称应该简短而有意义。变量名的选择应该是助记符,也就是说,旨在向不经意的观察者表明其使用的意图。除临时“一次性”变量外,应避免使用单字符变量名称。临时变量的常用名称是 i、j、k、m 和 n,表示整数; c、d 和 e 用于字符。

      一些例子包括

      int             i;
      char            c;
      float           myWidth;
      

      【讨论】:

        【解决方案4】:

        无论你的命名约定是什么,它通常都不允许你轻易区分:

        • 实例(通常是私有)变量
        • 局部变量(用作参数或函数的局部变量)

        我使用基于 indefinite article (a, an, some) 的局部变量用法的命名约定,并且没有关于实例变量的文章,正如关于 variable prefix 的问题中所解释的那样。

        所以前缀(无论是我的方式,还是列出的任何其他前缀in that question)都可以成为改进变量命名约定的一种方式。

        我知道您的问题不限于变量,我只是想指出命名约定的那一部分。

        【讨论】:

          【解决方案5】:

          有,Einar Hoest 的"Java Programmers Phrasebook"

          他分析了方法名的语法结构和方法体的结构,收集到的信息有:

          add-[名词]-* 这些方法通常有参数并创建对象。 他们很少返回字段值。 这句话几乎出现在所有 应用程序。

          等等......从数百个开源项目中收集。

          更多背景信息,请参考他的SLE08 paper

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-05
            • 2012-08-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多