複雑な処理をしたいときに乱数を使うことは多いです。
という訳でJavaScript初心者向けに乱数の扱い方についてまとめてみました。
また乱数を使う時に役立つ応用テクニックについても紹介したいと思います。
乱数の基本 - rand関数について
JavaScriptで乱数を作るには基本的にrandomメソッドというのを使います。
これは0以上1未満の任意の浮動小数点の乱数を返すメソッド
次のように Math.random() を呼び出すことで乱数を得ることが可能です。
1 |
var x = Math.random(); |
変数 x には 0.12 とか 0.542 とかの少数の乱数が代入されます。
ちなみに他のプログラミング言語だとシード値というのを設定することが多いです。
これは再現性のある決まった乱数列を再現するために使われる乱数の種みたなもの
ですがJavaScriptではシード値の設定は不要で、設定する関数もありません。
JS側で勝手にシード値は決めてくれるので特にそのことは意識しなくてOKです。
ある範囲の乱数を発生させるには?
先ほど説明したようにrandom関数は0以上1未満の乱数しか返しません。
なので2以上5未満のように特定範囲の乱数を発生させるには少し工夫が必要
とはいっても Math.random が返した乱数を少しだけ計算すればいいだけです。
その計算は最小値を min 、最大値を max として次のような計算式
1 |
var x = Math.random() * (max - min) + min; |
これで min 以上 max 未満の乱数ができます。
max を範囲に含めたいこともあると思いますが、その方法については後で解説
以下任意の範囲で乱数を発生させているコード例です。
1 2 |
/** 2 ~ 5までの乱数 */ var x = Math.random() * (5 - 2) + 2; |
1 2 |
/** 11 ~ 19までの乱数 */ var x = Math.random() * (19 - 11) + 11; |
1 2 |
/** 100 ~ 999までの乱数 */ var x = Math.random() * (999 - 100) + 100; |
1 2 |
/** 0 ~ 9までの乱数 */ var x = Math.random() * 9; |
一番最後の例は特殊で、0の時は最小値を省略してOK
また次のように関数化すればいちいち計算しなくていいので便利です。
1 2 3 4 |
/** min以上max未満の乱数を返す */ function getRandom(min, max) { return Math.random() * (max - min) + min; } |
例えば getRandom(3, 7); のように呼び出せば3以上7未満の乱数が返ってきます。
以上が任意の乱数を発生させる方法
少し計算しないといけないですが簡単な計算をしてるだけです。
また整数だけで乱数を作る方法はこの後のテクニック編で紹介します。
乱数作成に役立つテクニック集
それでは乱数の基本的な使い方が分かったところで次は応用編
いくつか実用的で役立つテクニックを紹介していこうと思います。
整数値のみの乱数を作成
Math.random は0以上1未満の少数乱数を返すメソッドです。
なので整数のみの乱数を作りたいときは少し工夫が必要
そしてその工夫とは乱数作成の式でfloorメソッドを使うこと
例えば2以上5未満までの整数のみの乱数を作りたい場合は次のように書けばOKです。
1 |
var x = Math.floor(Math.random() * (5 - 2)) + 2; |
ただし上のコードだと5未満なので5自体は含まれないことに注意
もし5まで含める場合は次のように書く必要があります。
1 |
var x = Math.floor(Math.random() * (5 - 2 + 1)) + 2; |
詳しいやり方やコード例については次でまとめた通り
もし整数値のみの乱数が必要ならこのテクニックを試してみてください。
重複しない乱数を作る
例えば1~10までの整数の間で被らない乱数を作りたいなどの場合です。
その場合は乱数を作る場合に少しだけ工夫が必要になります。
重複なし乱数を作るのに一番簡単な方法は配列を使うこと
次のように配列で重複チェックしながら乱数を生成するのが楽です。
- とりあえず一時的に範囲内の乱数を生成
- 配列にそれが含まれているか確認
- もし含まれていなければ配列に追加
- もし含まれていれば処理をスキップ
- この流れを作りたい乱数の数だけ繰り返す
この詳しいやり方については次でまとめました。
ある範囲の整数を被りなしで一度ずつ生成したい場合、このテクニックが一番簡単だと思います。
ここまでのまとめ
ということで乱数について簡単にまとめ
- Math.randomメソッドを使う
これは0以上1未満の少数値で乱数を返すメソッド
- 範囲指定は計算が必要
乱数の最小値を min 、最大値を max とすると次の式
1var x = Math.random() * (max - min) + min;
これで min 以上 max 未満の乱数を作ることが可能
指定範囲の乱数を作成するには少しだけ計算が必要なことに注意
以上JavaScriptで整数を扱う方法と役立つテクニックについてまとめました。