ゲームのガチャ、おみくじ、サイコロ。押すたびに結果が変わるから、何度でも試したくなる——あのドキドキの正体が乱数(らんすう)です。JavaScriptなら1行で作れます。
まず素の姿を見てみよう
console.log(Math.random());コンソールに0.8264097…のような小数が出ます。もう一度実行すると、まったく別の数。何が出るかは誰にも分かりません。
サイコロに変身させる
小数のままでは使いにくいので、「1〜6の整数」に加工します。決まり文句はこれです。
const dice = Math.floor(Math.random() * 6) + 1;内側から順に読み解きます。
| 部分 | 結果 |
|---|---|
Math.random() | 0〜0.999…の小数 |
× 6 | 0〜5.999…の小数 |
Math.floor( ) | 小数点以下を切り捨てて0〜5の整数に |
+ 1 | 1〜6に |
Math.floorは「切り捨て」の道具です(floor=床。床のほうへ丸める、と覚えます)。6の部分を変えれば「1〜10」でも「1〜100」でも作れます。似た道具に四捨五入のMath.roundもありますが、乱数の加工には向きません——四捨五入だと両端の数だけ出にくくなり、公平なサイコロにならないのです。切り捨て一択で覚えましょう。
よく使うレシピ集
「掛けて、切り捨てて、足す」の型さえ覚えれば、いろいろな乱数が作れます。よく使う形をまとめておきます。
| ほしい乱数 | 書き方 |
|---|---|
| 0〜9の整数 | Math.floor(Math.random() * 10) |
| 1〜10の整数 | Math.floor(Math.random() * 10) + 1 |
| 1〜100の整数 | Math.floor(Math.random() * 100) + 1 |
| 2分の1の判定 | Math.random() < 0.5 |
最後の行だけ形がちがいます。Math.random()の結果が0.5未満になる確率はちょうど半分なので、コインの表裏のような「50%の判定」は、この式をif文の条件にそのまま書くだけで作れます。
道を3つ以上に分ける:else if
前回のif文は「もしも/さもなければ」の2択でした。おみくじのように3つ以上に分けたいときは、あいだにelse if(さもなくば、もしも)をはさみます。
if (num === 1) {
console.log("大吉!");
} else if (num === 2) {
console.log("吉");
} else {
console.log("ふつう");
}上から順に調べて、最初に成り立ったところだけが実行されます。
JavaScriptもしも〜なら:if文「もしも/さもなければ」の基本をおさらいしたいときはこの回動きを見てみよう
乱数・else if・イベントの合わせ技で、おみくじの完成です。
if〜else if〜elseで結果を出し分けています。同じボタンなのに結果が変わる——これが乱数の魔法です。このレッスンのまとめ
Math.random()で0以上1未満のでたらめな小数が作れる- 「1〜6の整数」は
Math.floor(Math.random() * 6) + 1——掛けて、切り捨てて、足す - 3つ以上に分けるときは
else ifをあいだにはさむ