Dan*_*ahn 12 ruby coding-style
这是一个关于惯例的问题.以下两组命令返回相同的结果.
a = [1, 2, 3]
a.first # => 1
a[0] # => 1
a.last # => 3
a[-1] # => 3
Run Code Online (Sandbox Code Playgroud)
在Ruby,显式索引或函数中哪些是首选的?当然,假设这是在代码中始终访问第一个或最后一个元素.
注意:我一直在考虑每个人都会采取的周期.因为first
并last
接受参数,他们会有更多的开销,但我不知道这是否会影响社区的偏好.
谢谢!
编辑
如果你阅读这篇文章的评论,我的最后一段就有一个很大的争论.虽然我没记住这[x]
相当于.[](x)
,但我的结论是正确的,即第一个和最后一个有更多的开销.考虑到两者的性质,我认为这是由于first
/ 的参数检查last
.这些需要检查是否存在参数,而[]
可以假设它们存在.
码
require 'benchmark'
a = [1..1000]
MAX = 1000000
Benchmark.bm(15) do |b|
b.report("small first") { MAX.times do; a.first; end }
b.report("small [0]") { MAX.times do; a[0]; end }
b.report("small last") { MAX.times do; a.last; end }
b.report("small [-1]") { MAX.times do; a[-1]; end }
end
a = [1..100000000000]
Benchmark.bm(15) do |b|
b.report("large first") { MAX.times do; a.first; end }
b.report("large [0]") { MAX.times do; a[0]; end }
b.report("large last") { MAX.times do; a.last; end }
b.report("large [-1]") { MAX.times do; a[-1]; end }
end
Run Code Online (Sandbox Code Playgroud)
结果
user system total real
small first 0.350000 0.000000 0.350000 ( 0.901497)
small [0] 0.330000 0.010000 0.340000 ( 0.857786)
small last 0.370000 0.000000 0.370000 ( 1.054216)
small [-1] 0.370000 0.000000 0.370000 ( 1.137655)
user system total real
large first 0.340000 0.010000 0.350000 ( 0.897581)
large [0] 0.320000 0.010000 0.330000 ( 0.889725)
large last 0.350000 0.000000 0.350000 ( 1.071135)
large [-1] 0.380000 0.000000 0.380000 ( 1.119587)
Run Code Online (Sandbox Code Playgroud)
Lin*_*ios 10
代码读取超过它被写入,并first
与last
少取精力去了解,特别是对于缺乏经验的程序员的Ruby或某人从不同的索引语义的语言.
虽然大多数程序员会立即知道这些是相同的:
a.first
a[0]
Run Code Online (Sandbox Code Playgroud)
第一个仍然更容易阅读.阅读的难度并没有显着差异,但它就在那里.
last
是另一个问题.访问索引0将以几乎任何语言为您提供数组的第一个元素.但负面索引仅适用于某些语言.如果一个具有最小Ruby经验的C程序员试图读取我的代码,那么他们会更快地理解吗?:
a.last
a[-1]
Run Code Online (Sandbox Code Playgroud)
负面指数可能会迫使他们进行谷歌搜索.
归档时间: |
|
查看次数: |
4431 次 |
最近记录: |