【发布时间】:2014-02-14 11:33:29
【问题描述】:
我们或应该 我们如何将 Java 或其他类似 C 的常量大小写约定延续到 JavaScript?
在 Java 中,我们将使用 ALL_UPPERCASE 命名“常量”(静态最终)成员。如果我们有一组我们想要作为常量的值,我们可以使用枚举成员和we'd name the enum member with a HumpBack name,但单独的枚举将是大写的,例如SomeClass.SomeEnum.SOME_VALUE.
假设我有一个用于某些星际迷航游戏的 JavaScript 库(选择一个愚蠢的示例),其根命名空间对象 StarTrek。我有一些常量值(没关系 Js 没有常量)我想为外星物种构建,行星的属性。如果不考虑 Java 约定,我会选择类似的东西:
StarTrek.SPECIES = {
HUMAN: "HUMAN",
KLINGON: "KLINGON",
VULCAN: "VULCAN"
};
StarTrek.PLANET_ATTRIBUTE = {
CLASS: {
M: "M",
T: "T",
...
},
LIFE_FORMS: {
NONE: "NONE",
INTELLIGENT: "INTELLIGENT",
NO_INTELLIGENT: "NO_INTELLIGENT"
}
};
请注意,与 Java 不同的是,我们在 PLANET_ATTRIBUTES 中有类似 嵌套“枚举”的东西。我在这里选择了大写的“枚举”名称,因为感觉StarTrek. 以下的所有内容本质上都应该是“常量”(相对于 Java 中枚举实际上是一个类,因此是 BumpyCase 名称)。所以无论如何我可以通过使用StarTrek.PLANET_ATTRIBUTE.LIFE_FORMS.NO_INTELLIGENT 来指定没有智能生命形式的地方。
现在,按照 Java 的约定,我会采用类似的方式:
StarTrek.Species = {
HUMAN: "HUMAN",
KLINGON: "KLINGON",
VULCAN: "VULCAN"
};
StarTrek.PlanetAttribute = {
Class: {
M: "M",
T: "T",
...
},
LifeForms: {
NONE: "NONE",
INTELLIGENT: "INTELLIGENT",
UNINTELLIGENT: "UNINTELLIGENT"
}
};
在这种情况下,我会使用StarTrek.PlanetAttribute.LifeForms.NO_INTELLIGENT 指定没有智能生命形式的地方。
哪个更适合 JavaScript,为什么?是否为此提出了任何约定?
【问题讨论】:
-
第二个看起来不那么烦人了。
标签: javascript naming-conventions