【问题标题】:JavaScript naming conventions for conflicting classes冲突类的 JavaScript 命名约定
【发布时间】:2015-08-10 08:35:13
【问题描述】:

TL;DR

我们如何命名具有扩展 JavaScript 的默认类功能的特性的类(例如 Array)。

说明

我是AlgoFlux Runtime 的作者,这是一个为数据结构、算法和处理提供类的小型库。这个库有 arrayobjectmathcolors 和其他很酷的东西的帮助模块。

我应该如何命名它们?现在我正在使用以下约定:

  • MathH
  • ArrayH
  • ObjectH
  • ..

H 表示一个 Helper 类。现在看起来有点丑。

名称间距?

是的,我可以像AlgoFlux.Arrays.unique() 一样封装所有这些。但我想保持简短,如果 JS 支持 using <class> 语句,就像在 C# 中一样,那将是一个好主意。

原型设计?

扩展内置类是个坏主意。为此制作单独的模块是一个不错的设计决策。

我们将不胜感激有关此问题的任何帮助。谢谢。

【问题讨论】:

  • 您的问题与CR 相比,更具有话题性。 SO 适用于特定的编程问题。
  • SO 对naming-conventions 有 2,729 个问题。我想这个问题也符合条件。

标签: javascript naming-conventions naming


【解决方案1】:

这个问题可能有点基于意见,但您可以选择一些选项:

目前:命名空间和/或 AMD。最终:ES6's modules.

命名空间:

是的,我可以像AlgoFlux.Arrays.unique() 一样封装所有这些。但我想保持简短......

嗯,你不需要复数形式(例如AlgoFlux.Array.unique)。让您的用户担心做空。例如,如果我愿意,那么在我的代码中包含你的库之后,我可以这样做:

var A = AlgoFlux;

那我用A.Array.unique(),只比ArrayH.unique()长一个字符。

...如果 JS 支持 using 语句,就像在 C# 中那样,那将是一个好主意。

上面的var 声明很接近; ES6 模块一路走来。

AMD

如果您支持 AMD,那么与上面的命名空间一样,您的 用户 可以根据他们的代码做出此决定:

var A = require("AlgoFlux");

...甚至:

var ArrayH = require("AlgoFlux.Array");

...如果他们愿意的话。 :-)

ES6 模块:

当您可以开始在野外使用它们时(因为它们是全新的,还没有广泛的支持),它将是:

import A from 'AlgoFlux';

import {Array as ArrayH} from 'AlgoFlux';

【讨论】:

    【解决方案2】:

    我会把它写成下划线,这样你就可以有一个

     your_namespace.method(someArray)
    

     your_namespace(someArray).method1().method2() etc
    

    AlgoFlux 对于命名空间来说有点太长了(并且 lowerCamelCase 在 javascript 中更习惯),因此我会选择类似的东西

    afx.array.getRandomValues(...)
    

    d3 是这种多级命名空间的完美示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      相关资源
      最近更新 更多