标识符名称更好?

时间:2010-02-07 08:42:38

标签: naming-conventions naming identifier

如何训练自己提供更好的变量和函数名称(程序中任何用户定义的名称)。

8 个答案:

答案 0 :(得分:4)

实践。

每当您编写或阅读代码(包括其他人的代码)时,始终要考虑它。试着弄清楚你会在他们的代码中做些什么,并在可能的情况下与他们讨论它(但不要竖琴,这将是一件麻烦事)。问他们为什么选择某个名字的问题。

查看您的代码在没有评论的情况下读取的情况。如果您需要评论您所命名的内容的基本目的,请考虑它是否可以有更好的名称。

最重要的是积极的心理参与:练习。

答案 1 :(得分:2)

对名字的思考似乎是某些人非常苛刻的事情,我不确定治愈方法是什么。当我还是一名从事商业培训的讲师时,我经常会看到这样的情况:

我:好的,现在你需要创建一个整数变量来包含getchar()返回的值。

[学员开始打字,我在训练室里徘徊。大多数人都做得很好,但其中一人就像一头冷冻大灯的鹿一样坐着]

我:问题是什么?

他:我想不出变量的名字!

所以,我会给它们一个名字,但我觉得有这个问题的人不会在编程上走得太远。或许问题是它们走得太远......

答案 2 :(得分:0)

这是一个主观问题。

我努力使我的代码与库(或至少是标准库)保持一致,以便代码具有一致性。我建议:看看如何命名标准库函数。寻找模式。了解存在哪些不同的命名约定。看哪一个最有意义。例如:大多数Java代码使用非常大的标识符名称,Camel大小写等.C使用简洁/短名称。然后有匈牙利语符号 - 当编辑不够智能为您提供类型信息时,这是值得的。如今,你可能不需要它。

答案 3 :(得分:0)

几年前乔尔·斯波尔斯基写了a helpful article on Hungarian notation。他的主要见解是:

  

让我们尝试编写代码   将确保if的约定   你犯了这个错误,代码   只是看错了。如果代码错误,   至少,看起来不对,那就有了   战斗被抓住的机会   有人致力于该代码或   检查该代码。

他继续展示如何以严谨的方式命名变量可以改善我们的代码。关键是,避免错误比使我们的代码更“可维护”具有更快,更明显的ROI。

答案 4 :(得分:0)

阅读一些好的代码并模仿它。这是学习任何东西的普遍方式;只需用适当的单词替换“read”和“code”。

答案 5 :(得分:0)

找到富有表现力的名字的一个好方法是从文本描述开始,你的软件实际上是做什么的。 对于类名词,函数(方法)名称的良好候选者是动词。 如果你先设计,一种方法是textual analysis

答案 6 :(得分:0)

  • (即使你只是一个团队1)同意你的同事的编码标准,所以你们都使用相同的命名约定。 (例如,对于快速返回的值使用属性是常见的,但对于需要时间计算的值,使用GetXXX或CalculateXXX方法。此约定使调用者更好地了解是否需要缓存结果等)。尝试使用相同的名称作为等效概念(例如,不要像Microsoft在.net中那样混合使用Array.Count和List.Length。)

  • 尝试阅读您的代码,就像其他人写的那样(即忘记您知道的所有内容并阅读它)。是否有意义?它能解释他们理解它所需要知道的一切吗? (可能不是,因为我们都忘记描述我们“知道”或“明显”的东西。回过头来澄清命名和文档,以便其他人可以拿起你的代码文件并轻松理解它。)

  • 保持名称简短但具有描述性。写一个完整的句子是没有意义的,但是在大多数IDE中都有自动完成功能,除非它是一个非常标准的缩写,否则缩写任何东西都没什么意义。

  • 不要浪费字符告诉某人这个字符串是一个字符串(匈牙利表示法的通用解释)。使用描述做什么的名称,以及如何使用。例如我使用前缀来表示用法(m =成员,i =迭代器/索引,p =指针,v = volatile,s =静态等)。这是访问变量时的重要信息,因此它是名称的有用补充。它还允许您将一行代码复制到电子邮件中,接收器可以准确理解所有变量的用途 - 静态volatile和参数之间的使用差异通常非常重要。

  • 在名称中描述变量的内容或方法的目的,避免使用技术术语,除非您知道代码的所有读者都知道这些术语的含义。使用您能想到的最简单的描述 - 复杂的单词和技术术语听起来既聪明又令人印象深刻,但更容易被误解(例如,在我的头脑中:Collat​​ion或SortOrder,Serialise或Save - 尽管这些是众所周知的单词编程所以不是很好的情况)。

  • 避免像“价值”,“类型”这样模糊且近乎毫无意义的词语。对于基类属性尤其如此,因为在派生类中最终会出现“类型”,如果键入它,您不知道它是什么类型。使用“JoystickType”或“VehicleType”,其含义会更加清晰。

  • 如果您使用带单位的值,请告诉人们名称中的内容(angleDegrees而不是angle)。这个简单的技巧将阻止你的宇宙飞船撞上火星。

  • 对于Visual Studio中的C#,C ++,C,请尝试使用AtomineerUtils向方法,类等添加文档注释。此工具从您的名称中获取自动文档,因此您的名称越好,更好的文档和完成文档所需的工作量更少。

答案 7 :(得分:0)

阅读“代码完整”一书,更具体地说,请参阅第11章有关命名的内容。这是清单(来自here,需要免费注册):

常规命名注意事项

该名称是否完整准确地描述了变量代表的内容? 名称是指实际问题而不是编程语言解决方案吗? 这个名字是否足够长,以至于您不必将其解开? 名称末尾是否有计算值限定符(如果有)? 名称是使用Count还是Index而不是Num?

命名特定类型的数据

循环索引名称是否有意义(如果循环长度超过一行或两行或嵌套,则除了i,j或k之外的其他名称)? 是否已将所有“临时”变量重命名为更有意义的内容? 布尔变量是否被命名为当它们为真时它们的含义是否清楚? 枚举类型名称是否包含指示类别的前缀或后缀 - 例如,Color_Red的Color_,Color_Green,Color_Blue等等? 是否为它们所代表的抽象实体命名的命名常量而不是它们引用的数字?

命名约定

约定是否区分本地,类和全球数据? 约定是否区分类型名称,命名常量,枚举类型和变量? 约定是否为不强制执行的语言中的例程标识仅输入参数? 约定是否与语言的标准约定尽可能兼容? 名称是否格式化以便于阅读?

短名称

代码是否使用长名称(除非必须使用短名称)? 代码是否避免只保存一个字符的缩写? 所有单词都是否一致缩写? 这些名字是否可以发音? 是否可以避免误读名称? 翻译表中是否记录了短名称?

常见命名问题:您是否已经避免......

......有误导性的名字? ......具有相似含义的名字? ...只有一个或两个字符不同的名称? ......听起来相似的名字? ...使用数字的名字? ...故意拼写错误的名字让它们缩短? ...通常用英语拼写错误的名字? ...与标准库例程名称或预定义变量名称冲突的名称? ......完全任意的名字? ......难以阅读的人物?