WHITELEAF:Kindle応援サイト

KindleでWEB小説を読もう! Narou.rb 公開中

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