Arrays 使用array[array.length-1]还是使用自己的方法是最佳做法?

Arrays 使用array[array.length-1]还是使用自己的方法是最佳做法?,arrays,language-agnostic,Arrays,Language Agnostic,例如(在JavaScript中): vs 从技术上讲,后一种方法使用较少的一个字符,但也使用了一个幻数。诚然,在这种情况下,可读性可能不会真正受到影响,但神奇的数字很糟糕。使用哪种方法更好?我认为1和0在许多情况下并不真正算作“幻数”。当你提到最后一个项目的索引(即长度-1 < /代码>)时,这肯定是一个我不会考虑 1 /代码>一个神奇数字的时候。 < P>不同的语言有自己的访问数组最后元素的惯用方式,并且应该使用它。例如,在Groovy中: myArray.last() 在C语言中,人们很可

例如(在JavaScript中):

vs


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

我认为
1
0
在许多情况下并不真正算作“幻数”。当你提到最后一个项目的索引(即<代码>长度-1 < /代码>)时,这肯定是一个我不会考虑<代码> 1 /代码>一个神奇数字的时候。

< P>不同的语言有自己的访问数组最后元素的惯用方式,并且应该使用它。例如,在Groovy中:

myArray.last()
在C语言中,人们很可能会这样做:

my_array[len - 1]
在Common Lisp中,类似于:

(first (last my_list))

我的看法是,我们应该寻找大多数程序员都熟悉的风格。考虑到任何使用这种数组语法(即受C影响的命令式语言)编程超过两周的人都会接受数组使用基于0的索引的想法,我怀疑任何阅读您的代码的人都会理解
array[array.length-1]
的含义


方法调用没有那么标准,并且是特定于语言的,因此如果您不完全熟悉该语言,您将花费更多的时间来理解它。这本身就让我更喜欢
length-1
样式。

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

更容易阅读和理解,但有些人不这么认为,比如JavaScript。我一直认为len-1方法对于JavaScript来说非常惯用,但有一点:许多人出于各种原因反对它,比如一些旧浏览器不支持原型对象,
用于in
循环等。可读性是另一个主要问题,但这里的大多数人似乎都同意[array.length-1]是可读的。不,不是:)人们之所以使用它,是因为他们习惯了,改变习惯很难。代码在编写时很容易理解。但是,当你阅读这样的代码时,它会大大减慢你的速度。@piotrek:不过,并非每种语言中的每个数组对象都有
last\uuuuuuuuuuu()
函数。在没有它的语言中,
length-1
始终是索引最后一个元素的最常用方式,因此在该语言中,我认为它更具可读性(不必重复检查自定义函数是否执行您认为它执行的操作)。但是,如果存在这样一个函数,那么我绝对同意你的看法。
my_array[len - 1]
(first (last my_list))