search
LoginSignup
0
Help us understand the problem. What are the problem?

【初心者向け】Ruby のまずいコード 25 本 Advent Calendar 2021 Day 6

posted at

updated at

【Ruby のまずいコード】階乗

お題

引数として与えられた正の整数の階乗を返すメソッドを定義してください。
n の階乗とは,1 から n までの整数を掛け合わせたものです。

コード

コード 1

def factorial(n)
  (1..n).inject{ |product, x| product * x }
end

コード 2

def factorial(n)
  (1..n).inject(&:*)
end

改善

コード 1 よりコード 2 のほうが簡潔ですが,Enumerable#inject には引数としてシンボルを与える用法があり,これを使うと

def factorial(n)
  (1..n).inject(:*)
end

と書けます。
コード 2 より 1 字少ないだけですがコード 2 では Proc オブジェクトが作られるのに対し,こちらは作られません。

速度は大して変わらないようですが,n が小さいときはこちらのほうが有意に(しかし少しだけ)速いようです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0
Help us understand the problem. What are the problem?