不同语言中的命名约定是否相似?如果不是,有什么区别?
6 回答
每种语言都有特定的风格。最后一个。每个项目都采用特定的风格。至少,他们应该。这有时可能与您的语言使用的规范风格不同 - 可能基于开发领导者的偏好。
使用哪种风格?
如果您的语言附带一个好的标准库,请尝试采用该库中的约定。
如果您的语言有一本规范的书(C 编程语言、骆驼书、Ruby 编程等),请使用它。
有时语言设计者(C#、Java 会想到)实际上编写了一堆指南。使用它们,特别是如果社区也采用它们。
如果您使用多种语言,请记住保持灵活性并将您喜欢的编码风格调整为您使用的语言 - 当使用 Python 编码时,使用与 C# 等编码不同的风格。
正如其他人所说,事情变化很大,但这里是各种语言中最常用的命名约定的粗略概述:
lowercase, lowercase_with_underscores
:
常用于局部变量和函数名(典型的 C 语法)。
UPPERCASE, UPPERCASE_WITH_UNDERSCORES:
常用于永不改变的常量和变量。一些(较旧的)语言(如 BASIC)也有一个约定,所有变量名都使用大写。
CamelCase, javaCamelCase:
通常用于函数名和变量名。有些仅将其用于函数并将其与小写字母或小写字母与变量的小写字母结合使用。当使用 javaCamelCase 时,它通常用于函数和变量。
这种语法对于外部 API 也很常见,因为 Win32 和 Java API 就是这样做的。(即使库在内部使用不同的约定,它们通常使用 (java)CamelCase 语法导出函数名称。)
prefix_CamelCase, prefix_lowercase, prefix_lowercase_with_underscores:
常用于不支持命名空间的语言(即 C)。前缀通常表示函数或变量所属的库或模块。通常保留给全局变量和全局函数。前缀也可以大写。一些约定对内部函数和变量使用小写前缀,对导出的函数和变量使用大写前缀。
当然还有很多其他的方式来命名事物,但大多数约定都是基于上面提到的一种或多种方式。
顺便说一句:我故意忘记提到匈牙利符号。
我认为大多数命名约定会有所不同,但开发人员会有所不同,例如我将变量命名为:mulitwordVarName,但是我与之合作过的一些开发人员使用了诸如 mulitword_var_name 或 multiwordvarname 或 aj5g54ag 之类的东西,或者......我认为这真的取决于你的偏好.
多年前,一位聪明的老程序员教我匈牙利符号的邪恶,这是一个真正的遗留系统,微软在 Windows SDK 和后来的 MFC 中采用了它。它是围绕像 C 这样的松散类型语言设计的,而不是针对像 C++ 这样的强类型语言。当时我正在使用 Borland 的用于 Windows 的 Turbo Pascal 1.0 编程 Windows 3.0,后来成为 Delphi。
无论如何,此时长话短说,我所在的团队开发了我们自己的标准,非常简单,适用于几乎所有语言,基于简单的前缀 -
- 一个参数
- l - 本地
- m - 成员
- g - 全局
这里的重点是作用域,依赖编译器来检查类型,你只需要关心作用域,数据所在的位置。与讨厌的旧匈牙利符号相比,这具有许多优点,因为如果您通过重构更改某些内容的类型,则不必搜索和替换它的所有实例。
将近 16 年后,我仍然在推广这种做法,并且发现它几乎适用于我开发的每一种语言。