例如(在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]);
从技术上讲,后一种方法使用少一个字符,但也使用一个幻数。当然,在这种情况下,可读性可能不会受到影响,但魔术数字很糟糕。使用哪种更好的做法?
答案 0 :(得分:6)
我认为1
和0
在许多情况下并不真正算作“神奇数字”。当你引用最后一个项目的索引(即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
风格。