为什么Java程序员喜欢将变量命名为“ clazz”?[关闭]


156

我已经看到很多代码都有声明,例如Class clazz,它来自哪里?这是某种约定吗?我认为'clazz'甚至不是一个英文单词,根本没有任何意义,那么多的程序员又怎能巧称一个错误的名字呢?


36
别忘了克拉!
Peter Recore 2010年

24
@Peter:好点,这很夸张。
总统詹姆斯·波尔克(James K. Polk)2010年

13
Aleksey Shipilev建议使用сlass西里尔字母拼写с作为替代。
斯图尔特·马克斯

12
@StuartMarks我拒绝这个主张。别客气。
Goran Vasic '16

16
在英格兰,我们通常使用“ clarse”。
约翰·高尔斯

Answers:


173

clazz从JDK 1.0开始,在Java中已使用Java代替保留字“ class”。“ class”是您想要的,但是缩写或插入垃圾(“ a”,“ the”,“ _”等)会降低清晰度。clazz只是说课。“国际”英语使用者(同时阅读英语和美国英语的人)习惯于对“ s”和“ z”进行转置。

由于Java从一开始就公开了源代码和适当的文化,因此有价值的Java代码和教程采用了相同的约定。这是Java生态系统的一大优点,我认为这是其成功的重要组成部分。


82
很难同意“ clazz”比“ _class”或“ myClass”更清晰。如果我在代码中看到“ _class”,则其意图要比将我发送到Google(和该页面)的非单词更明显。
uscjeremy

@uscjeremy:就个人而言,我更喜欢使用下划线而不是使用仅在大小写不同的标识符。是我设计的语言,我会有它是区分大小写的,不区分大小写规则的混合:任何标识只能使用完全相同的原壳,但任何标识的声明将隐藏任何预先存在的标识符,它仅在大小写上有所不同。其Foo在类范围,并确定foo在局部变量的作用域应该是合法的,但局部范围内的类范围的变量的所有引用应要求this.Foo。这样的规则会...
超级猫

@uscjeremy:...我认为结合了区分大小写和不区分大小写的语言的优点。不区分大小写的语言的好处是,无需说“大写foo”或“小写的foo”,标识符名称“ foo”的语音读数即可明确,但是没有真正的理由允许someThing在某些地方拼写标识符,并且sOmEtHiNg在其他人。
超级猫

1
@supercat标点符号是Unicode通用类别。unicode.org/faq/punctuation_symbols.html /我不会设计C#。在Java中,您无需使用任何方法fnord,一个fnord大写字母或无用的字词,而是调用了一个称为的方法和一个名为的字段。我认为这足以作为反例。
Tom Hawtin-定位线

3
@uscjeremy 很难同意“ clazz”比“ _class”或“ myClass”更清晰 —是的。但是,使用“ _class”不是一种选择,因为它显然与Java命名约定冲突。
MC Emperor

73

因为他们不能使用他们想要使用的单词class。它是保留的。


2
是的,我知道,但是我认为将可变权利拼写会更有意义。
索耶2010年

22
@Tony-您如何说“您知道”,并要求在同一注释中正确拼写变量名?它们是互斥的。
duffymo

3
@Tony,您根本无法将变量命名为“ class”,这是保留字。
Steve Kuo

6
@duffymo:这很有趣。我知道class是保留字,我确实要求变量名拼写正确,为什么它们互斥?您必须将其称为“班级”吗?
索耶2010年

13
我猜Tony希望将变量命名为更具描述性的名称,而不仅仅是“类”。例如,可以说“ x”的拼写正确,但是含义并不像“ numberOfComments”那么多
Peter Recore 2010年

17

这仅仅是因为'class'是保留关键字,因此Class class是不允许的。因此,您会看到Class clazzClass cls


7
我想不出命名一个类的理由,Class因为在任何给定的项目中都有太多的类,因此调用一个类该类似乎毫无意义。我也想不出一个理由来称呼VARIABLE class...
Blindy

8
您没有将Class命名为Java API。
索耶2010年

3
@Blindy:java.lang.Class呢?您在那里没有太多选择。
Dan Dyer 2010年

14
@Blindy:已经有一个叫做Class的类,它很好地引用了一个对象的类。拥有一个称为“类”的变量的完美原因是当您使用对象的类(例如:弄清对象的类型)时
Reverend Gonzo

3
我会考虑提供信息ClassInformation,或ClassMetadata类似的东西。每个类都是一个类,但是您不能全部命名它们,而是Class通过它们的主要功能命名它们。
布林迪

7

这取决于实际的编译器及其区分令牌在上下文中的含义的能力。但是,在这种特殊情况下,编译器无法区分令牌class在不同上下文中的含义。这是一条严格的规则class,无论上下文如何,该规则都用于表示类的声明,因此,它是保留字。这是一样简单和低级的。

如果您感到被迫,可以编写自己的Java编译器以包含一个上下文规则,该规则将允许您将其class用作变量名。虽然我认为最好还是花点时间使用clazzklass-可能对您的健康也有好处。


3
关于无能的一句话:Java被设计保留词语言。尽管(不)可读性强,但非保留字语言可以成功地编译和突出显示语法语句,例如if if then then else else。因此,编译器是故意留下无法
USR-本地ΕΨΗΕΛΩΝ

4

这是从哪里来的?

我首先在Josh Bloch的困惑者那里看到它。但我敢肯定,其他开发人员早就使用了它。乔什·布洛赫(Josh Bloch)刚出名。


4

Java不具有允许您使用关键字作为标识符的功能,这与带有@前缀(例如,@class是有效的标识符)的C#不同。


2
那是一个不同的标识符。 class并且$class在JVM中都是有效(但不同)的标识符。您无法在可转换为"class"VM 的Java源文件中编写标识符。
finnw 2010年

2

它只是一个英文单词,被Keyword Class Keyword替代(等效),以使人们理解它是Class。而且几乎可以提高《守则》的可读性

没有什么大逻辑参与其中



0

我们使用clazz是因为class是类型标头。例如,您在此处使用class:

public class HelloWorld {

和这里:

Object.class.getName();

因此很不幸,我们必须使用替代名称,例如clazz。


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.