Либо выглядит хорошо, но если вы серьезно задумывались о производительности, я провел несколько тестов:
require 'benchmark'
a = (1..1000).to_a
def first(a)
a.each_with_index do |o,i|
a.size == (i + 1)
end
end
def first_cached(a)
a_size = a.size
a.each_with_index do |o,i|
a_size == (i + 1)
end
end
def second(a)
a.each do |e|
a.last == e
end
end
def second_cached(a)
a_last = a.last
a.each do |e|
a_last == e
end
end
Benchmark.bm(7) do |x|
x.report("first") {10000.times {first(a)}}
x.report("first_cached") {10000.times{first_cached(a)}}
x.report("second") {10000.times{second(a)}}
x.report("second_cached") {10000.times{second_cached(a)}}
end
, которые вернулись:
user system total real
first 2.020000 0.010000 2.030000 ( 2.024102)
first_cached 1.930000 0.000000 1.930000 ( 1.947230)
second 1.920000 0.010000 1.930000 ( 1.922338)
second_cached 1.350000 0.000000 1.350000 ( 1.352786)
Итак, вторая версия, сразмер кэша дал лучшие результаты ... однако, если эти микропроцессоры не имеют значения, это не должно быть проблемой.