2015-02-06 40 views
4
validationError([elem1,elem2],type,shiftNo); 

在参数中声明一个数组是否是不好的做法?

var arr = [elem1,elem2]; 
validationError(arr,type,shiftNo); 

我的意思要问的是呼叫认为是坏的功能(也它有任何性能后果)的方法1。并且就此而言,在参数内部声明字符串,对象和函数是一种糟糕的方法。

+3

选项1没有错。更好的是,如果你以后不打算使用'arr'。 – techfoobar 2015-02-06 11:54:21

+0

对我来说似乎很好,没有明确的惯例/最佳做法。 – 2015-02-06 12:03:53

回答

7

性能不是问题,不是像JS,Ruby或whatnot这样的语言。所以我们所能做的就是考虑代码的可读性。这个案例与JS并没有很强的关联,所以这将是我的例子。

move = ["E2", "E4"]; 
if chessboard.valid(move, player) { 
    ... 
} 

此明确指出:“如果移动(E2 E4)的有效期为这个棋盘,然后......”,你甚至不需要看文档就知道。如果我们写了不分配我们的阵列的名称,结果看起来有点神秘(仍然很容易猜到,但更难这样一个小例子):

if chessboard.valid(["E2", "E4"], player) { 
    ... 
} 

这是什么意思? valid代表什么?也许,这是问这些单元格是否包含有效玩家的棋子?这是一个设计缺陷,更确切地说是错误的命名。它对如何使用棋盘代码做出了大胆的假设。我们可以明显地表明这阵代表通过重命名chessboard的方法一招:

if chessboard.valid_move(["E2", "E4"], player) { 
    ... 
} 

这是更好的,但你可能没有一个API,使你的代码留下脍炙人口没有一些额外的命名。

所以,我建议一个经验法则:

  1. 如果阵列将被使用超过一次,将其命名。
  2. 如果数组的含义并不明显(函数名),请将其命名。
  3. 不要命名它,除非点1或2适用。
+0

感谢您的比喻......不能要求更好的解释.... – 2015-02-06 16:51:34

2

确实没有什么区别。无论哪种方式,你创建一个JavaScript数组,它基本上是一个对象并获得一个参考作为回报(你传递给你的方法)。如果您不需要在代码中稍后访问该数组(或其他数据),则第二种方法是完全正确的。

+0

嗯...我知道,从性能的角度来看没有任何顾虑......但编码惯例/实践......呢? – 2015-02-06 12:00:48

+1

我猜想惯例是非常主观的。但是,如果我们从客观的角度来看待它,我不觉得创建一个* Array引用*并将它分配到本地范围内,当我们从不在事实旁边使用它时传递该引用到一个功能。所以在我看来,调用方法时创建* Ref *是更好的方法。 – jAndy 2015-02-06 12:04:41

2

这是主观的,但在我看来,它是更好地使用第二种方法

由于@jAndy表示在代码执行方面没有区别,您的代码的性能也不差,但它更易于调试并且更易于阅读和理解第二种方法。

2

arr的内容是否会再次被使用?如果是这样,那么选项2肯定是要走的路。如果不是......这很简单,可能只是个人意见。

就个人而言,我不得不说,选项2是更好的做法,即使有时我有罪使用选项1选项2更容易阅读的,它更容易跟踪和它不太可能有人会必须重新阅读它,因为在阅读代码时(尤其是较新的程序员),他们暂时感到困惑或迷失于思想流动中。由于这些原因,维护起来会更容易,您以及将来可能会使用您的代码的开发人员可能会节省使用它的时间。

我看到的唯一的负面因素是产生的开销绝对很小,现在你有2行代码,而不是1个。但我认为这是无关紧要的,选项2的微小潜在好处超过了微小的负面因素选项1.

相关问题