【问题标题】:Is there a naming convention for nested "const" JavaScript values?嵌套的“const”JavaScript 值是否有命名约定?
【发布时间】: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


【解决方案1】:

答案是:真的没关系(完全)!

第二个约定看起来更好(第一个对你大喊大叫)并且在 C# 中也使用,但这取决于你!我认为对此没有任何限制。

但是关于 javascript 中的枚举值:也许这样会更好?您可以将枚举用作标志。

StarTrek.Species = {
    HUMAN: 1,
    KLINGON: 2,
    VULCAN: 4
}

编辑:

正如Jason所说,在javascript中没有常量的概念,所以这取决于你的选择。

【讨论】:

  • 添加到这个。请记住,在 JavaScript 中确实没有常量的概念。在这种情况下,物种只是一个对象,它的值可以更改。
  • 我发现 key=value 模式有时在这里工作得更好,使验证更容易。例如。用户将 StarTrek.Species.HUMAN 传递给我的函数,但我只得到一个字符串;我可以通过查看它是否存在于 StarTrek.Species 中进行检查。 function setSpecies(species) { if(!StarTrek.Species[species]) { throw new Error('Unknown species'); }; this.species = species; }
  • 我承认在我的问题“没关系 Js 没有常量”中缺少 Js 实常量。然而,虽然它不能强制执行,但它仍然是一个很好的概念和命名约定。
  • @jlarson 是的。我刚刚提到了 c-sharpy 枚举。
猜你喜欢
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 2012-05-07
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
相关资源
最近更新 更多