命名指南的简介:编写有意义的变量名称
#javascript #softwareengineering #bestpractices #namingconventions

对我来说,命名变量类似于给婴儿一个名字。它可以告诉我们一些关于他们是谁或他们将成为什么。我对挑选合适的人的想法过于思考。这不仅仅是变量。还有功能,参数,类,软件包,源文件和目录。许多程序员已经认识到命名事物的困难,但很少使用明确的准则。首先,我们将解决使用指南的好处,然后我们将介绍一些从Clean Code借来的命名指南。坚实的基础将帮助我们入门。

Image description

使名字有意义的好处

找到某个变量或功能的唯一名称,我们中有多少人被停止并感到惊讶?一位著名工程师曾经说过:

计算机科学中只有两种困难:缓存无效和命名事物

但是,正确命名的东西为什么如此重要?

当您有这样的想法时,您知道斗争是否意味着什么?这实际上是做什么的?我们很少有人知道有意名称的价值。它的重量会延续到未来。它可能对您和您的团队产生负面影响。如果没有,相反的效果将在以下领域改善:

  • 一致性

熟悉您的代码会产生信心。命名指南鼓励了这一期望。这在团队环境中尤其有效。即使作为一般指南,我们也想使用标准。否则,我们将互相挑选的命名能力,并在《代码审查》或《开发过程中途》中进行讨论。

  • 可读性

当您了解某些东西时,您可以减轻认知负担。没有人喜欢让他们的头变得扭曲。通过清晰,您有效地传达了代码的目的,队友将感谢您。

当我发现自己被卡住并盯着一个名字时,我被赋予了一项任务,可以在现有代码库上进行一些返工。我不了解那里,直到我更深入地研究了代码的实施。为什么首先没有自我解释?

  • 生产力

没有事先的准则或命名的思想会使您无法完成项目或任务。

您重读代码实现,以找出正在发生的事情。超过要求的时间还要多。事实证明,从长远来看,未能花时间正确命名您的软件。

不要低估良好标题或名称的影响。拥有好名称会增加代码集成并消除误解,从而改善其他领域,例如代码可维护性和代码重复使用!

命名指南(和最佳实践)的入门套件

要建模命名指南,我们需要知道如何设计名称。这需要编程方面的经验,尤其是一个团队。

幸运的是,已经很少有很棒的模型,我们可以得到一些曝光以建立我们的基础。

命名准则应在代码库中共享和使用。他们是关于使用什么而不使用的协议。

这是我的外卖,带有干净的代码和其他文章,提供了一些出色的观点。

使用意图浏览名称

考虑可变,功能或类的大问题。回答以下问题:为什么它存在,以及如何使用。

当您找到真正的目的时,再次更改名称

当我们选择姓名并编写代码时,我们没有完成。回顾一下,看看昨天的代码今天是否有意义。随着新的信息和功能即将到来,考试中的代码的目的可能会改变。

避免虚假信息和非信息

信息在命名方面具有一致性,并且经常使用现有知识来帮助其命名。我们不想始终拿出词典,也不想在我们的浏览器中查找术语。 虚假信息没有直接回答代码要做的事情。因此,它缺乏意义和透明度。同时,非信息 do 具有含义或线索。

  • 缩写可能是虚幻的。

一般而言缩写是不建议的。
例如c可以代表“碳”,“摄氏”或“ Century”

与现有编程概念交织在一起的名称令人困惑。

例如。 str可以表示“强度”,也可以用编程术语“字符串”。它的项目范围会有所不同,但是当您制作RPG游戏时,您可能会有这种冲突。

但是,我会为被循环的列表例外。

例如。 cards是一个数组,我只期待一个项目。

cards.map((c) => c);

c可以被重写为卡,但已经暗示。

  • 0,lowercase o,大写O和小写L是真正可怕的变量名称。

很难判断数量零,字母“ O”,大写和小写之间的差异。小写字母“ L”和数字1是一样的。更重要的是!

,例如

let a = l;  
if ( O == l )  {
  a = O1;
} else {
  l = 01;
}
  • 数字系列命名是非信息的。

他们也可以用象形文字写。

,例如

Array.prototype.swap = function (x1, x2) {
  var b = this[x1];
  this[x1] = this[x2];
  this[x2] = b;
  return this;
}

x1可能是source,而x2可能是target

做出有意义的区别

当遇到经常给出非常通用的名称的类似概念时,您可能会很想在其他任何地方都使用它稍微调整的版本。但是您可以(这只是懒惰的命名)。

当您遇到以下内容时,进行进一步的区别:

  • 以“ s”结尾

例如。 apple的复数只是一个字母与apples不同。有了未经训练的眼睛,程序员可能会错过这个边缘细节。可以通过使它们成为集体名词来解决它们。想想basketOfApplesbunchOfApples

  • 噪音单词相同的含义,不同的拼写

甚至不将相同的术语用于两个不同的目的。

例如。 totalOfCashamountOfIncome有什么区别?他们俩的意思是同一件事。找出特异性和分化。

使用明显的名称

当您进入技术领域时,编程是一项社交活动,您会感到惊讶。因此,如果您可以发音要引用的变量,那么您将无法进行讨论而不会听起来很愚蠢!

使用可搜索的名称

当名称变得更加唯一时,代码编辑器中的搜索栏可以缩小结果。当要重构代码库时,这是必不可少的。

在这里,我们如何使名称更加搜索:

使用更长的名称
单个字母的名称导致最大歧义。较长的名称充当更好的标识符,并提供足够的上下文。

有一个例外:单字母名称在简短方法中的局部变量中还可以。请参阅中的示例避免虚假信息和非信息缩写可以是虚假信息,其中绘制了阵列以及已经暗示的项目。

在原始值上使用恒定命名约定
例如max_passenger_on_board告诉您的数字9。

班级名称

这是一些经典指南,用于协助命名为对象语言中存在的类别。

  • 名词或名词短语名称

通过使用名词,您可以理解new关键字的初始化。

,例如

const apple = new Fruit("sweet", "crunchy");

使用附加的动词或动词不太有意义。例如new createFruit()new Swim()

思考具体的单词,具有单一明确含义的东西。

  • 向不同状态开放

避免在调用更改状态的方法时与状态不一致的类名称。

使名称较少具体。

例如。 new FelineDomesticAnimal与不能或不能成为的东西过于封闭(它说只允许猫)。像new Animal这样的东西允许更多的多样性。

覆盖所有预期值。不将手段写成结局。避免矛盾。写这个字段。使用适用于状态可以保留的值的名称。

例如。使用方法startend的类可能具有像Race这样的名称,而不是FinalRace。 “最终”表明它与方法end相同。

使其具有包容性。

方法名称

方法名称应该是动词或动词短语名称。

例如。 saveDocumentplayMusicdelete

对于辅助,突变器和谓词,JavaBeans Naming Convention表示应以其价值命名,并以getset的前缀为前缀。因此,仅将其用于现场访问。

,例如

const grade = student.grade();
teacher.setGrade(80);

对于具有副作用的方法,请勿使用getishas前缀。

使用解决方案域名

不要害怕使用计算机科学术语,算法名称,模式名称,数学术语等。阅读您的代码的人是程序员。

,如果没有程序员,请使用问题域名。与问题域概念有关的代码应具有从中得出的名称。即使我们可能不知道这意味着什么,我们至少可以询问域专家的含义。它节省了编写自己的名称城堡并来回引用给定的蓝图域名的麻烦。

添加有意义的上下文

名称本身可能是有意义的,但是当它们不是时,您需要将它们放在读者的上下文中。将它们包装在命名良好的类,功能或名称空间中。如果失败,请前缀名称添加必要的上下文。

总结说

清晰是国王。我们为人类编写代码,而不仅仅是满足计算机的编译器。我们想浏览我们的代码,并尽快生产。我们不想花一个小时来解密代码名称。我不怪别人,这很难命名。一项既定的命名指南有助于提高我们在决定名称方面分享的困难,我们都可以同意并感到轻松理解。一旦成为经验丰富的开发人员,您就可以自定义或改进标准!


参考