使用array [array.length - 1]或滚动自己的方法是最佳做法吗?

时间:2012-08-01 21:26:51

标签: arrays language-agnostic

例如(在JavaScript中):

//Not that I would ever add a method to a base JavaScript prototype... 
//(*wink nudge*)...
Array.prototype.lastIndex = function() {          
  return this.length - 1;
}

console.log(array[array.lastIndex()]);

VS

console.log(array[array.length - 1]);

从技术上讲,后一种方法使用少一个字符,但也使用一个幻数。当然,在这种情况下,可读性可能不会受到影响,但魔术数字很糟糕。使用哪种更好的做法?

4 个答案:

答案 0 :(得分:6)

我认为10在许多情况下并不真正算作“神奇数字”。当你引用最后一个项目的索引(即length - 1)时,肯定会有一次我不认为1是一个幻数。

答案 1 :(得分:1)

不同的语言有自己的惯用方法来访问数组的最后一个元素,应该使用它。例如,在Groovy中将是:

myArray.last()

在C语言中,人们很可能会这样做:

my_array[len - 1]

在Common Lisp中,类似于:

(first (last my_list))

答案 2 :(得分:1)

我同意@DragoonWraith的观点,即1不是幻数。然而,它不是关于魔术数字,而是关于可读性。如果您需要使用最后一个索引myArray.lastIndex(),如果您需要使用最后一个元素myArray.last()myArray.lastElement()。它比myArray[myArray.length - 1]

更容易阅读和理解

答案 3 :(得分:0)

我认为我们应该寻找大多数程序员熟悉的风格。鉴于任何使用这种数组语法(即受C影响的命令式语言)语言编程超过几周的人都会对数组使用基于0的索引的想法感到满意,我怀疑有人读过你的代码将理解array[array.length-1]的含义。

方法调用不太标准,并且是特定于语言的,因此如果您不完全熟悉该语言,那么您将花费更多时间来理解它。仅这一点让我更喜欢length-1风格。