【问题标题】:How is this statement making sense? (Sun's naming convention for Java variables)这个说法有什么意义? (Sun 对 Java 变量的命名约定)
【发布时间】:2011-02-12 06:17:36
【问题描述】:

过去几天我一直在引用 Sun 文档中的这段话,直到现在我才停下来思考它在说什么,但我无法理解它。请记住,英语不是我的第一语言。

Naming conventions

变量:除变量外,所有实例、类和类常量的大小写混合,首字母小写

这有什么意义?这不是说类名与小写首字母混合大小写吗?就像我应该将其命名为class myClass?并且类常量也与小写首字母混合大小写?不是Integer.MAX_VALUE,而是应该命名为integer.maxValue

它是否真的说明了变量本身应该如何命名?

是我没有正确解析还是这实际上是一个明显的错误?

【问题讨论】:

  • 似乎断章取意或编辑不当...
  • 对我来说似乎是一个错字。
  • @Gabriel:该链接可点击到 Sun 自己的官方网站。你可以看到整个上下文并告诉我它是否有意义。
  • 我查看了archive.org,这段文字的日期是1998年2月15日,所以我找不到任何解释。也许他们想写“包括”并省略额外的“类”......

标签: java naming-conventions


【解决方案1】:

Sun 已将此视为 错误,优先级较低:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4311597

描述命名变量的约定(表中的倒数第二行)。这显然是错误的 - 类 如表中的下一行所示,常量不是大小写混合的。这是什么“除了变量” 商业?文本应该描述变量!!

正文应为:

“所有实例和类变量都混合在一起......”

因此删除了“变量除外”和“类常量”这些词

【讨论】:

  • 太棒了。最后明确承认这是一个错误,我并没有发疯并忘记如何解析英语。好吧,尽管如此,我可能还是会发疯。
  • 嗯,它说的是低优先级,我猜他们是认真的... +1 错误,直到它被修复,它只有一票...
  • @Stephen - 完成。看来我什至有一个帐户。太棒了。
【解决方案2】:

这是它上面的几个框:

类名应该是名词,大小写混合,每个内部单词的首字母大写。尽量保持你的类名简单和描述性。使用完整的单词,避免使用首字母缩写词和缩写词(除非缩写词比长格式更广泛地使用,例如 URL 或 HTML)。

class Raster;
class ImageSprite;

以下:

声明为类常量的变量名和 ANSI 常量名应全部大写,单词之间用下划线(“_”)分隔。 (应避免使用 ANSI 常量,以便于调试。)

static final int MIN_WIDTH = 4;

static final int MAX_WIDTH = 999;

static final int GET_THE_CPU = 1;

矛盾,不是吗? “类常量”应该从该变量约定语句中排除,即使它们表示public final 类型的非静态常量,因为它会使人们感到困惑。

至于“除了变量”,我相信他们的意思是原始的local variables应该只有一个词。

【讨论】:

  • 问题不在于其他盒子在说什么。问题是这个盒子在说什么。因为它没有任何意义。
  • 解决此问题的最佳方法是查看上下文。
【解决方案3】:

这几乎可以肯定是对实际意思的错误编辑:

变量:所有变量名称 (不包括常数)混合 首字母小写。

【讨论】:

  • 是的,这是有道理的,因为这应该是官方推荐的。令我惊讶的是,这份大概是官方文件包含如此明显的错误,而且经过这么长时间都没有被发现。
  • 所写的声明毫无意义。我盯着它看了一会儿,脸上带着滑稽的表情,试图弄明白它的意思。但是在数百页的推荐中,这些东西都被遗漏了。
  • 那么我应该如何在我的回答中引用该建议的权威?每当我看到人们用大写首字母命名变量时,我总是会引用这句话。直到现在我才意识到这没有任何意义,而且可能会让他们的情况变得更糟。
  • 您引用的文本显然是荒谬的。联系 Oracle,请求修复。请参阅其他编码约定站点,例如geosoft.no/development/javastyle.html:“变量名称必须以小写开头的混合大小写。”
【解决方案4】:

您需要阅读全文才能了解上下文:

除了变量,所有实例, 类,类常量在 混合大小写与小写优先 信件。内部词以 大写字母。变量名应该 不以下划线 _ 或美元开头 符号 $ 字符,即使两者 是允许的。

变量名应该简短 有意义的。变量的选择 name 应该是助记符——也就是说, 旨在向休闲人士表明 观察其使用意图。 一个字符的变量名应该是 避免,除了临时 “一次性”变量。常用名称 对于临时变量是 i, j, k, m 和 n 表示整数; c、d 和 e 为 字符。

所以 [local] 变量要简短(意味着它们可能没有足够的“单词”来混合大小写)。

所有其他变量(实例或类级别的变量,非本地变量)将混合大小写并以小写字母开头(并且可能足够“冗长”以能够混合大小写,像 "lineNumber" 而不是 "number");

编辑(忘了常量)。

在 Java 中有两种查看常量的方法:

  1. 任何带有final字样的东西
  2. 任何有保证值的东西 总是一样的

所以:

class Foo
{
    public final int variable;
    public final int CONSTANT;

    static
    {
        variable = // generate a random number.
        CONSTANT = 5;
    }
}

这里的“变量”是“常数”,因为它一旦被赋值就不能改变,但它不像“CONSTANT”那样是常数,因为“CONSTANT”的值总是5。

我认为 #2 是 Java 中唯一的常量。

编辑#2(回应下面的评论)。

我会重写为:

除了局部变量,所有 实例、类和类空白 决赛[我也可以指定 空白的最后是没有的 单个编译时间值]在 混合大小写与小写优先 信。

您可以查看http://www.codeguru.com/java/tij/tij0071.shtml 以获得更多描述。

【讨论】:

  • 第一句话对我来说仍然没有任何意义,至少还有其他几句话(“除了”是一个重要的关键字)。如果它对您有意义,您需要向我们更好地解释它。
猜你喜欢
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多