编码命名风格

“There are only two hard things in Computer Science: cache invalidation and naming things.”

引言

编码命名风格是在软件开发中起着至关重要作用的一项技能。一个好的命名风格可以增强代码的可读性、可维护性和可重用性,使得代码更加易于理解和修改。在本文中,我们将深入讨论常见的编码命名风格,包括驼峰命名法、蛇形命名法和匈牙利命名法,并探讨它们的优缺点和最佳实践。


常见的编码命名风格

驼峰式命名法(camel case)

简介

驼峰命名法是一种常用的命名风格,单词之间不以空格或连接符 “-”、下划线 “_” 连接,主要分为大驼峰和小驼峰两种形式。

在大驼峰命名法(upper camel case,也被称为 Pascal 命名法)中,每个单词的首字母都大写,而在小驼峰命名法(lower camel case)中,第一个单词的首字母小写,其余单词的首字母大写。

大驼峰命名法

(图片来源于 Wiki)

小驼峰命名法

(图片来源于 Wiki)

例子

大驼峰命名法:

  • FirstName
  • UserName
  • TmpData

小驼峰命名法:

  • firstName
  • userName
  • lowerCamelCase

优缺点

优点:

  • 可读性:由于使用了大小写混合的形式,使得单词之间的边界更明显,有助于代码更易于阅读和理解。
  • 美观性:使用驼峰命名法可以使代码看起来更加整洁和美观,有助于提高代码质量和可维护性。
  • 与惯例一致性:驼峰命名法已经成为许多编程语言(C#、Java、JavaScript、PHP 等)和框架的惯例,因此使用它可以使代码更符合行业标准和约定。

缺点:

  • 长度:使用驼峰命名法可能会导致变量名变得很长,尤其是在包含多个单词的情况下,驼峰式命名法可能使变量名变得不够易读。
  • 命名冲突:由于驼峰命名法中的大小写形式相同,因此如果两个变量名只有大小写不同,则可能会导致命名冲突。
  • 不适合某些情况:有时候,驼峰命名法可能不适合某些特定的情况,比如需要与其他系统或API进行交互时,可能需要使用特定的命名规范或命名方式。

蛇形命名法(snake Case)

简介

蛇形命名法,也称为下划线命名法。在蛇形命名法中,单词之间或逻辑断点之间用下划线 “-”分隔。

例子

  • first_name
  • user_name
  • tmp_data

优缺点

优点:

  • 可读性:由于使用单词之间用下划线分隔的形式,使得单词之间的边界更明显,有助于代码更易于阅读和理解。
  • 命名风格统一:蛇形命名法在许多编程语言中都是常用的命名约定,因此可以在不同的编程语言(Python、Ruby、JavaScript、PHP 等)和环境中使用,而不需要进行额外的转换或重命名。
  • 易于输入:在编写代码时,输入下划线相对于连字符或驼峰式命名法更加容易和自然。

缺点:

  • 代码冗长:由于使用下划线分隔单词,因此蛇形命名法的变量名通常比其他命名约定的变量名更长。
  • 美观性:蛇形命名法可能会使代码看起来不够美观和整洁,因为它在变量名中使用了许多下划线字符。
  • 不适合网络:在 Web 开发中,蛇形命名法不适合用于 HTML/CSS 中的类名和 ID,因为它们会影响可读性和 SEO(搜索引擎优化)。

匈牙利命名法(Hungarian Notation)

简介

匈牙利命名法是一种命名风格,由 Charles Simonyi 在 Microsoft 公司开发 Windows 应用程序时提出。它的名字“匈牙利”源于 Simonyi 的出生地匈牙利。在当时,计算机的内存非常昂贵,因此使用这种命名约定可以帮助程序员更好地管理内存,减少内存浪费和数据类型错误。在匈牙利命名法中,前缀通常由一个或多个小写字母组成,后面跟着变量名。这个后半部分的首字母可以大写,以区别前面的类型指示字母,匈牙利命名法最初的设计目的是提高代码可读性和可维护性。

例子

  • strName - 表示该变量是一个字符串类型的变量
  • iCount - 表示该变量是一个整型计数器
  • bEnabled - 表示该变量是一个布尔型的开关
  • szBuffer - 表示该变量是一个以 null 结尾的字符串缓冲区
  • hWnd - 表示该变量是一个窗口句柄(handle to window)
  • lpData - 表示该变量是一个指向数据的指针(pointer to data)
  • fValue - 表示该变量是一个浮点数(floating-point value)

优缺点

优点:

  • 可读性:匈牙利命名法使用类型前缀或其他含义相关的前缀来表示变量的含义,有助于代码可读性和可维护性。
  • 类型检查:修改代码时,通过类型前缀可以更容易地找到相应的变量,并且可以轻易的对变量类型进行检查,减少了在运行时发生类型错误的风险以及提高代码的可维护性。
  • 防止变量重名:通过加上前缀,可以避免不同类型的变量同名的情况。
  • 规范化:使用匈牙利命名法可以使代码更加规范化,因为多个开发人员可以使用相同的命名规则,从而使代码更易于维护。

缺点:

  • 代码冗长:由于需要加上类型前缀,变量名可能会变得很长,这使得代码显得冗长而难以阅读。
  • 不适用于某些场景:匈牙利命名法通常不适用于面向对象的程序设计,因为它难以表示对象和类之间的关系。
  • 不兼容:由于不同平台使用的类型前缀可能不同,因此在跨平台开发时,命名可能会变得混乱。
  • 非强制性:匈牙利命名法不是强制性的,因此在一个团队中使用时,可能会出现有些人使用它,有些人不使用的情况,这可能会导致代码混乱。

串式命名法(kebab-case)

简介

Kebab-case 命名法是一种命名约定,它是一种使用连字符 “-” 将单词连接在一起的方式来命名变量、函数、文件等。

例子

  • user-name
  • tmp-data
  • first-name

优缺点

优点:

  • 可读性:由于使用单词之间用连字符分隔的形式,使得单词之间的边界更明显,有助于代码更易于阅读和理解。
  • 与没有分隔符的命名方式相比,kebab-case 更易于阅读和理解,因为单词之间有明显的分隔符。
  • 与URL一致:kebab-case 在 URL 和文件路径中广泛使用,因此在 Web 开发中非常流行
  • 网络友好性:在 Web 开发钟,kebab-case 常用于 HTML/CSS 中的类名和 ID,因为它们更易于阅读和 SEO。

缺点:

  • 不易于使用:由于破折号(-)在某些编程语言中具有特殊意义,因此使用 kebab-case 变量名可能会引起一些问题,特别是在使用命令行工具和脚本时。
  • 代码冗长:因为使用了连字符 “-”,kebab-case 变量名通常比其他命名约定更长,这可能会使代码更难以阅读和理解。

火车命名法(Train-Case)

简介

Train-Case 命名法(也称为 Pascal-Case-With-Dashes)是一种命名约定,它是一种使用连字符将单词连接在一起的方式来命名变量、函数、文件等,并且使用大驼峰命名法的方式首字母大写。火车命名法通常用于编程语言、文件命名、网页URL等场景中,可以提高可读性和可维护性。

例子

  • User-Name
  • Tmp-Data
  • First-Name

优缺点

优点:

  • 可读性:由于每个单词首字母大写并且单词之间用连字符分隔的形式,使得单词之间的边界更明显,有助于代码更易于阅读和理解。
  • 可维护性好:命名规范统一,使得代码更易于理解和修改,便于维护。
  • 易于转换:相对于驼峰命名法,火车命名法更易于与其他命名方式进行转换,例如可以将连字符 “-” 替换为下划线 “_” 或驼峰命名法。

缺点:

  • 代码冗长:由于使用连字符 “-” 分隔单词,因此火车命名法的变量名通常比其他命名约定的变量名更长。
  • 变量名较长:因为使用了破折号 ‘-’,kebab-case 变量名通常比其他命名约定更长,这可能会使代码更难以阅读和理解。
  • 不适用于所有编程语言:某些编程语言或系统可能不支持连字符 “-” 作为命名中的一部分,这可能导致在使用火车命名法时出现一些问题。

最佳实践

选择适合自己和团队的命名约定是一种非常主观的决策,不同的团队和项目可能会有不同的偏好和要求。以下是一些通用的最佳实践,可以帮助您选择和使用适合自己和团队的命名约定:

  1. 保持一致性:在整个项目中使用相同的命名约定,以确保代码的一致性和可读性。
  2. 使用有意义的名称:使用能够准确反映变量、函数或类目的名称,使代码更容易理解和维护。
  3. 避免过长的名称:尽量使用简短和明了的名称,同时避免使用过长的名称,以提高代码的可读性。
  4. 避免缩写:尽量避免使用缩写,因为缩写可能会导致代码难以理解。
  5. 选择流行的命名约定:流行的命名约定通常在广泛使用中,并且已被证明在许多项目中具有可靠性和可读性。

总之,选择一个适合自己和团队的命名约定并不是一件容易的事情。最重要的是选择一个命名约定,并坚持使用它。在整个项目中保持一致性和规范性,可以帮助提高代码的可读性和可维护性。


常见的编程命名错误

  1. 拼写错误:拼写错误可能是最常见的错误之一。如果你不小心将变量或函数名拼错了,编译器将无法识别它们,并给出错误提示。
  2. 不规范的命名:不规范的命名可能会导致代码难以理解。例如,使用单个字母或数字作为变量名可能会让人感到困惑,因为它们不清楚地描述变量的含义。
  3. 混淆变量名:在一些情况下,程序员可能会使用类似的变量名来表示不同的变量,这可能会导致混淆和错误。例如,使用类似于 “i” 和 “l” 这样的变量名,因为它们在某些字体中很难区分。
  4. 不一致的命名约定:使用不一致的命名约定可能会使代码难以阅读。例如,有时使用下划线分隔单词,有时使用驼峰命名法,有时使用全大写字母等等。
  5. 保留字冲突:如果你不小心使用保留字作为变量名,编译器将无法识别它们,并给出错误提示。
  6. 不恰当的长度:变量和函数名应该既不太短也不太长。如果变量名太短,它们可能不足以描述其含义,如果太长,则可能会使代码难以阅读。
  7. 忘记使用标准命名规则:某些编程语言有一些标准的命名规则,例如,Java中的 “驼峰命名法”,如果你忘记了这些规则,可能会使代码难以阅读和维护。
  8. 没有使用有意义的命名:变量和函数名应该有意义,并能够清晰地表达它们所代表的含义。如果命名没有意义,代码可能会难以理解。
  9. 不一致的缩写:如果你使用了缩写,应该确保它们的使用是一致的。例如,如果你将 “maximum” 缩写为 “max”,那么你应该在整个代码中都使用这个缩写。

推荐

Google 开源项目风格指南

Google 经常会发布一些开源项目, 意味着会接受来自其他代码贡献者的代码. 但是如果代码贡献者的编程风格与 Google 的不一致, 会给代码阅读者和其他代码提交者造成不小的困扰. Google 因此发布了这份自己的编程风格指南, 使所有提交代码的人都能获知 Google 的编程风格.

Google 开源项目风格指南目前已经发布了七份中文版的风格指南,包括 C++、Objective-C、Python、JavaScript、Shell、JSON、TypeScript,可以在 Github 上,相应的跳转到对应的风格指南去。

《代码整洁之道》

《代码整洁之道》(Clean Code)是由 Robert C. Martin 编写的一本经典的软件工程书籍,是软件开发者必读的一本书。

这本书主要讲述了如何编写清晰、可读、易于维护的代码。作者提出了许多有用的原则和实践,涵盖了代码组织、命名、注释、测试等方面的内容。书中提倡使用简单的代码结构、清晰的命名、精简的函数、规范的注释等技术来提高代码的质量。

该书主要包含以下内容:

  1. 代码整洁的重要性及其对软件开发的影响。
  2. 如何命名变量、函数、类等。
  3. 如何组织代码,使用类、函数等基本元素,以及如何避免重复代码。
  4. 如何编写有意义的注释,以及何时应该避免注释。
  5. 如何编写有效的单元测试,以及测试的重要性。
  6. 如何处理异常和错误,以及如何编写可恢复的代码。
  7. 如何编写简洁的代码,以及如何避免复杂的逻辑和表达式。
  8. 如何使用工具和技术来提高代码质量。

总的来说,《代码整洁之道》是一本非常实用的书籍,其中提出的许多原则和实践都是经过实践验证的,可以帮助开发者编写更好的代码,提高软件开发效率和质量。如果您想要提高自己的编程技能,我非常推荐这本书。