【问题标题】:Why do Java programmers like to name a variable "clazz"? [closed]为什么 Java 程序员喜欢将变量命名为“clazz”? [关闭]
【发布时间】:2011-02-01 13:34:35
【问题描述】:

我见过很多带有Class clazz 之类的声明的代码。这起源于哪里?这是某种约定吗?我觉得clazz连个英文单词都不是,没有任何意义,这么多程序员怎么会不约而同的叫错名字呢?

【问题讨论】:

  • 别忘了克拉斯!
  • @Peter:好点子,这是经典。
  • Aleksey Shipilev 建议使用带有西里尔字母с 拼写的сlass 作为替代。
  • @StuartMarks 我拒绝这个提议。不客气。
  • 在英格兰,我们通常使用 'clarse'。

标签: java naming-conventions


【解决方案1】:

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

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

【讨论】:

  • 很难同意“clazz”比“_class”或“myClass”更清晰。如果我在代码中看到“_class”,其意图会比将我发送到 Google(和此页面)的非单词更明显。
  • @uscjeremy:就我个人而言,我更喜欢使用下划线而不是仅区分大小写的标识符。如果我设计一种语言,我会希望它是区分大小写和不区分大小写规则的混合体:任何标识符只能使用完全以原始大小写,但任何标识符的声明都会隐藏仅在大小写上有所不同的任何预先存在的标识符。在类范围内定义Foo 并在本地变量范围内定义foo 应该是合法的,但是在本地范围内对类范围变量的所有引用都应该需要this.Foo。这样的规则会......
  • @uscjeremy: ...在我看来,结合了区分大小写和不区分大小写的语言的优点。不区分大小写的语言的好处是标识符名称“foo”的语音阅读将是明确的,而不必说“大写 foo”或“小写 foo”,但没有真正的理由允许将标识符拼写为 someThing in一些地方和sOmEtHiNg 在其他地方。
  • @supercat 标点符号的 Unicode 通用类别是我一直在寻找的。 unicode.org/faq/punctuation_symbols.html / 我不会设计 C#。在 Java 中,您可以使用一个名为 fnord 的方法和一个名为 fnord 的字段,而不会出现任何问题、大小写或废话。我认为这足以作为一个反例。
  • @uscjeremy 很难同意“clazz”比“_class”或“myClass”更清晰——没错。但是,使用“_class”不是一个选项,因为它显然与Java naming conventions 冲突。
【解决方案2】:

因为他们不能使用他们想要使用的词,即class。已保留。

【讨论】:

  • 是的,我知道,但我认为拼写一个可变的权利会更有意义。
  • @Tony - 你怎么能说“你知道”并要求在同一个评论中正确拼写变量名?它们是相互排斥的。
  • @Tony,你根本不能将变量命名为“类”,它是一个保留字。
  • @duffymo : 好笑。我知道class是保留字,我确实要求变量名拼写正确,为什么它们是互斥的??你必须称它为“类”吗?
  • 我猜托尼希望将变量命名为比“类”更具描述性的名称。例如,“x”可以说拼写正确,但并不像“numberOfComments”那么多
【解决方案3】:

Class clazz 声明在 Java 世界中很流行,但对于新手和拼写检查者来说可能会很尴尬。我听有人说应该避免根据principle of least astonishment

由于可以说是Class对象represents a type,我个人更喜欢将这样的变量声明为Class type

【讨论】:

    【解决方案4】:

    这取决于实际的编译器及其区分标记在其上下文中的含义的能力。但是,在这种特殊情况下,编译器无法区分标记class 在不同上下文中的含义。 class,无论其上下文如何,都用于表示类的声明,这是一个硬性规定,因此它是一个保留词。这是尽可能简单和低级的。

    如果您觉得有必要,您可以编写自己的 Java 编译器来包含一个上下文规则,该规则允许您使用 class 作为变量名。虽然我认为使用clazzklass 会更好地利用你的时间——这可能对你的健康也有好处。

    【讨论】:

    • 关于无能的一句话:Java 被设计为一种保留字语言。尽管(不)可读性,非保留字语言可以成功编译和语法高亮语句,例如 if if then then else else。所以编译器被故意留下 unable
    【解决方案5】:

    我们使用 clazz 是因为 class 是一个类型标头。例如,您在这里使用类:

    public class HelloWorld {
    

    这里:

    Object.class.getName();
    

    很遗憾,我们不得不使用替代名称,例如 clazz。

    【讨论】:

      【解决方案6】:

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

      【讨论】:

      • 这是一个不同的标识符。 class$class 在 JVM 中都是有效的(但不同的)标识符。您无法在 Java 源文件中编写任何标识符,该文件在 VM 中转换为 "class"
      【解决方案7】:

      这是从哪里来的?

      我第一次看到它是在 Josh Bloch 的益智游戏中。但我很确定其他开发人员更早使用它。乔什·布洛赫只是让它更出名。

      【讨论】:

        【解决方案8】:

        它只是一个英文单词被Keyword Class Keyword替换(等价),让人明白它是一个Class。而且几乎是为了增加代码的可读性

        这里没有什么大逻辑

        【讨论】:

        • 我认为是因为 z 只是 s 翻转
        【解决方案9】:

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

        【讨论】:

        • 我想不出一个理由来命名一个类Class,因为在任何给定的项目中都有太多的类,调用一个类 THE 类似乎毫无意义。我也想不出一个理由来调用变量class...
        • 你没有命名一个类 Class ,它是 java API。
        • @Blindy:java.lang.Class 呢?你没有太多选择。
        • @Blindy:已经有一个名为 Class 的类,它指的是一个对象的类。拥有一个名为“类”的变量的完美理由是当您使用对象的类时(即:弄清楚对象是什么类型)
        • 我会考虑提供信息的ClassInformation,或ClassMetadata 或类似的东西。每个类都是一个类,但你不要把它们都命名为Class,你可以通过它们的主要功能来命名它们。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 2014-03-29
        • 2020-07-21
        相关资源
        最近更新 更多