1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby】Random.randとRandom.newの違い

Posted at

はじめに

こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
本日は乱数を作成するための.randメソッドと.newメソッドの違いについて説明していきたいと思います

Random.randとは

Random.randは、RubyのRandomクラスに定義されているクラスメソッドです。
クラスメソッドなので、インスタンスを作成することなく、Random.randと直接呼び出せます。
このメソッドを使用する場合、Rubyのグローバルな乱数生成器が使われます。
特徴としては以下の通りです

  • 手軽に使える
    Random.randはどこからでも簡単に呼び出せます。
  • グローバルな乱数生成器を使用
    プログラム全体で同じグローバル乱数生成器を共有するため、何度も呼び出しても使い回されます。
  • 再現性が低い
    プログラムの実行ごとに異なる乱数が生成され、再現性が必要な場合には不向きです。
# 0から9までの乱数を生成
puts Random.rand(10)

# 1から6までの乱数を生成(サイコロの目のように)
puts Random.rand(1..6)

Random.randを使うと簡単に乱数を生成できますが、シード値の設定ができないため、常に異なる結果が得られる点に注意が必要です。

Random.newとは

一方、Random.newRandomクラスのインスタンスメソッドを利用する方法です。
Random.newを使うと、新しい乱数生成器のインスタンスを作成し、randメソッドを使って乱数を生成できます。
この方法ではシード値を設定することができ、同じシード値であれば同じ乱数列が生成されるため、再現性が求められる場面に適しています。

ちなみにシード値というのは、乱数の生成を開始する「初期値」のようなものです。
例えば、Random.new(1)とすると、シード値が「1」となり、このインスタンスで生成される乱数列は常に同じになります。シード値を変更すると生成される乱数列も変わるため、乱数の再現性を確保したい場合に便利です。

少しずれましたが、続いてRandom.new特徴は以下の通りです

  • 独立した乱数生成器
    Random.newで生成した乱数生成器はグローバルとは独立しており、他のコードでの乱数生成の影響を受けません。
  • シード値を設定可能
    シード値を指定して生成すると、実行のたびに同じ乱数の列が得られ、テストなどで結果を再現したい場合に便利です。
  • 再現性がある
    同じシード値を設定したRandom.newインスタンスは、毎回同じ乱数列を返します。
r1 = Random.new(1) # 乱数列を初期化する

p [r1.rand, r1.rand]
# => [0.123456789,0.987654321]

r2 = Random.new(1) # 乱数列を再び初期化する
p [r2.rand, r2.rand]
# => [0.123456789,0.987654321]

r3 = Random.new(2) # シード値を変更する
p [r3.rand, r3.rand]
# => [0.543843871,0.734416826] 

r1r2は同じシード値なので、乱数列を初期化すると同じ数字が出てきますが、r3はシード値が異なるため違う乱数列が出てきます

Random.randRandom.newの使い分け

では、どのような場面でどちらを使えば良いのでしょうか?以下に簡単なガイドラインを示します。

  • 手軽に乱数を生成したい場合
    Random.randが便利です。シード値を意識せずにランダムな結果が必要なときに最適です。
  • テストや再現性が必要な場合
    Random.newを使いましょう。同じ結果を得たい場合に、シード値を指定したインスタンスを利用すると一貫した乱数が得られます。

まとめ

本日は乱数生成について触れてみました。
HTMLやCSS、データベースあたりを勉強していた際はそこまで数学って感じではないかなと思っていましたが、最近勉強している内容は数学を想起させるような内容ばかりです。
またRubyの記事を上げていくのでよろしくお願いします。

1
0
0

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
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?