变量应命名为ID还是ID?[关闭]


126

这有点花哨,但我已经看到有人使用Id了:

private int userId;
public int getUserId();

其他使用:

private int userID;
public int getUserID();

其中一个比另一个更好吗?为什么?我在大型项目中看到这种做法非常不一致。如果我要设定一个大多数人会熟悉的标准?哪个是常规标准?


40
一致性是最重要的事情。无论是驼峰案例,还是下划线或其他内容。始终如一。

38
查看您语言的XML API,以了解它们的工作方式。Java将类命名为SAXParserDOMException,.NET将类命名为XmlDocument。基于此,我会在Java中说“ ID”,在C#中说“ Id”。
luiscubal

1
但是,按照惯例,在Java中,大写标识符用于静态字段,因此基本字段的“ ID”名称不是最好的。随之而来的是一致性……
Danubian Sailor

8
您可以命名变量EGOSuperEGO吗?我不这么认为。;)
kojiro

4
什么?!一致性?愤怒的战争在哪里?就是这样,我特此提名自己为神圣的驼峰式语法火焰的守护者,并据此颁布法令,用全大写的首字母缩写词是针对新手的。另外,除非您的猫无聊并且做奇怪的事情,否则要从顶部滚动卫生纸是正确的,在这种情况下,它们很难解开从底部滚动的卫生纸,这使得这种异端主义为人们所接受。猫的主人。我不知道为什么我要对此作出命令。我猜是厕位方向的圣火守护者鲍勃很忙。
Erik Reppen

Answers:


56

在这些情况下,要遵循的最重要规则是一致性:像其他所有人一样做。

例如,查看您语言的XML API,以了解它们的工作方式。

Java命名类如SAXParserDOMException,.NET命名类如XmlDocument

基于此,我会在Java中说“ ID”,在C#中说“ Id”。

但是,我已经看到Java EE 6有一个名为的注释@Id(请参阅文档),因此Java似乎认为“ Id”只是一个普通的单词。


@Id指向注释类名,而不是变量名。错误的例子。
jwenting

3
SAXParser可能是(但幸运的不是)SimpleAPIforXMLParser(甚至是SimpleApplicationProgramingInterfaceforExtesibleMarkupLanguageParser)。每个大写字母都是单词的开头。因此,即使在Java中,它也应该是“ Id”
user470365

2
@jwenting问题在于找出“ id”是像一个单词还是两个单词。@Id说这是一个单词,因此变量名称将为“ id”。
luiscubal

不可以。SAX是缩写,而Id不是。
2013年

8
使用IdC#(通常是.NET)使用是正确的,但原因有所不同。规则是将2个字母的首字母缩写词的所有字母都大写(例如IPAddress),而将较长的首字母缩写词的首字母大写(例如XmlDocument您所给的示例)。但是,Id并且Ok是该规则的例外,专门提到。有关完整的摘要,请参见本文的Capitalization Rules for Acronyms小节Capitalization Conventions。但是,即使微软也违反了该规则(例如DbConnectionvs. DBNull
Allon Guralnek

110

一致性为王;选择一个或另一个,但要始终做到一致。

也就是说,我更喜欢第一种变体,因为它不会违反camelCase(这样做意味着您要记住两个样式规则,而不仅仅是一个)。

两个大写字母有时使用,因为这个,而是一个ID是真的只是一个标识,entification的形式。


18
如果计算机程序尝试访问我的ID,我将不喜欢它。
Blrfl 2013年

1
userIdOfSender
肖恩·麦克索明

19
@SeanMcSomething:哎呀。 SenderUserId
罗伯特·哈维,

5
尽管我同意您的看法,但“ Id”是我了解混乱之处的首选方式:在日常对话中,我们实际上将其说成是首字母缩写,例如“我能看到您的ID吗?”。
500-内部服务器错误

3
看看骆驼案中的其他首字母缩写词。有SoapProtocol,而不是SOAPProtocol。ID是身份证明文件的缩写,所以我不明白为什么在骆驼案中应以特殊的方式对待它。就是说,与在程序中不一致使用的userId和userID相比,我更希望使用一致的userID。
尼尔,

76

TL; DR:在.NET类库的上下文中,Microsoft建议您使用ID。这有点违反直觉,因为这是允许/推荐使用的缩写的罕见示例(缩写通常会被皱眉)。

如果我们谈论的是C#或.NET类库约定,则Microsoft提供了一些定义明确的命名准则。他们经过深思熟虑,对各种问题进行了许多解释-实际上,每个开发人员都应花一些时间阅读整个“ 设计指南”部分。

对于首字母缩写词,经验法则是:对于两个字母首字母缩写词,您倾向于将它们保持大写(在适用Pascal大小写的情况下),因此例如IOStream可能是类的名称。对于较长的首字母缩写词,请小写其余首字母缩写词,例如XmlDocumentHtmlParser。这实际上是一个基本明确的规则(除非您将两个字母的首字母缩写链接在一起,否则一个单词的结尾和下一个单词的开头没有任何混淆),并且很快就习惯了。

那么,它是ID还是ID?好吧,根据微软的说法,这可能不是您的想法:

首字母缩写缩写不同,因为缩写词会缩短单个单词。例如,IDID缩写。通常,库名称不应使用缩写。

标识符中可以使用的两个缩写是ID和OK。在以Pascal大小写的标识符中,它们应显示为Id,然后单击确定。如果用作驼峰式标识符中的第一个单词,则它们应分别显示为id和ok。

有趣的是,我实际上不确定这种区别何时会出现在指南中,但是几年前(大约3.0 / 3.5),类库中的一般命名趋势已从ID变为Id。


1
这是我通常遵循的准则。由于id是缩写而不是首字母缩写,因此我始终喜欢使用'Id'。
Toby

我使用ID的原因是,它打破了惯例并以独特的形式脱颖而出,
对此我颇具

我认为微软错了。ID是身份证明文件的缩写,它不只是身份证明的缩写。(通常,首字母缩写词很明显。)
Tom Hawtin-大头钉

@ TomHawtin-tackline您提出了一个有趣的观点,尽管我怀疑这取决于上下文。诸如Person对象上的IDNumber属性之类的东西很有意义,但是对于VehicleId来说,它是“ Vehicle Identity Document”还是“ Vehicle Identifier”?在编程上下文中,标识符是唯一标识一个实例的任何事物的常用词,我认为在这里它更适用。
丹尼尔·B

@DanielB在计算机语言中,即使是SQL,“标识符”通常也指名称,例如列名。通常,它缩写为“ ident”。车辆是一个有趣的示例,因为已经建立了VIN方案(车辆识别号)。在典型的编程环境中,实体的“文档”是数字(甚至可能是不可伪造的功能)。
汤姆·霍顿

15

我在一些编码约定的文档中读了一个很好的解释。驼峰应始终使用缩略语,因为它更容易辨别单词边界(比较XmlIdWriterXMLIDWriter)。


12
这是区分单词边界的一个更好的主意:实际单词边界!xml_id_writer
卡兹(Kaz)

4
@Kaz好吧,du!但是,CamelCase传统上在某些语言中使用,在这种情况下使用下划线看起来不太合适。如前所述,一致性为王。
gilden 2013年

1
仅仅因为某种语言的核心库使用CamelCase并不是一致性,而是一致性。
卡兹(Kaz)2013年

3
@Kaz:与代码约定相比,您在商店中的战斗更大。
罗伯特·哈维

2

正如我们在JavaScript的默认函数getElementById()中所看到的;ID以驼峰式书写方式书写...

如果与下划线一起使用,请使用“ id”。 示例:user_id

如果命名不带任何下划线的var来区分不同的单词,请使用'Id'。示例:userId

如果它是单个单词变量,则应使用完整的小写字母;如果多个单词var,则使用小写的Camel。示例:thisIsExample

但是我强烈不建议在CAPS中全部使用“ ID”,因为我们通常使用所有大写字母来定义CONSTANTS。


在您的第三段中,您的示例似乎与您的文字不匹配?
ruakh

@ruakh thanx ..纠正..
Sukrit Gupta

0

首先,避免使用缩写。

其次,如果缩写是超级众所周知的,我建议使用驼峰式大小写。

那是因为您不需要考虑它的含义。只是当作一个普通的词

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.