1liner?
require "benchmark" def f1 return false || true end def f2 true unless false return false end Benchmark.bm { |bm| bm.report("f1") { 20000000.times { f1 } } bm.report("f2") { 20000000.times { f2 } } }
ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32] user system total real f1 8.672000 0.000000 8.672000 ( 8.766000) f2 9.828000 0.000000 9.828000 ( 10.047000)
ruby 1.9.2dev (2010-04-27 trunk 27505) [i386-mingw32] user system total real f1 3.422000 0.000000 3.422000 ( 3.578125) f2 3.578000 0.000000 3.578000 ( 3.640625)
1.8では意外と差が出ました。1.9では誤差レベルですね。1.8と1.9自体で比べるともう死ぬほど1.8が遅いです。
1.9では好きな方で書けばいいと思います。
ちなみにこういうようなコードを書く場合を想定してます。
def file_manager raise Error, "not created FileManager yet" if @file_manager return @file_manager end # もしくは def file_manager return @file_manager || raise(Error, "not created FileManager yet") end