GASにはMathオブジェクトのrandomというランダム関数が用意されています。
ランダム関数を使うと、数値の範囲を指定して数値をランダムに生成することができます。
Math.random()は0以上1未満の乱数を返します。
以下は、for文を使って、0~1の乱数を5回繰り返して、生成された数値を実行ログに表示するプログラムです。
function random() { for(let i=0;i<5;i++){ let rand = Math.random(); console.log(rand); } }
結果は次のようになります。
Math.random()は0以上1未満の乱数でしたがこれだと扱いが難しいです。
これをわかりやすくするためには必要な範囲の整数を掛け算し、Math.floorを使用して数値を整数化させます。(Math.floorの説明は後述します。)
例えば、サイコロゲームを作成しようとした場合など、1~6の数値をランダムに生成させたい場合があるとします。
このような場合には次のようの修正します。
function dice() { for(let i=0;i<5;i++){ let rand = Math.random(); let num = Math.floor(rand * 6) + 1; console.log(num); } }こ
ここコードを実行すると結果が1~6の範囲で出力されます。
Math.floorについて説明します。Math.floorは与えられた数値を切り捨てた整数値を返します。
例えば、Math.floor(3.7) は 3 を返します。
これを利用して以下の手順で1~6の範囲を生成してます。
2.Math.random() * 6 は、0以上6未満のランダムな浮動小数点数を生成します。
3.Math.floor(Math.random() * 6) を使用すると、上記の結果から小数点以下を切り捨て、0から5までの整数を取得できます。
4.最後に、+ 1 を追加することで、1から6までの整数を取得できます。
このように、random関数はゲームの要素があるプログラムを作る時によく使われます。
また、不規則な動作をさせる場合にもrandom関数を使用します。
例えば、作業効率のツールを作成する場合、サーバーにアクセスすることがよくあります。
自動化できるので繰り返して何度もアクセスさせることもあるのですが、コンピューターの処理速度でこれをやるとサーバーに大きな負荷がかかってしまいます。
すると、場合によってはスパム扱いされたり、アクセスを制限されてしまうこともあります。
このため、一回ごとに間隔を空けてアクセスするようにしています。
この時、いつも同じ間隔でアクセスしていると機械的な動作になってしまい、制限される可能性が高まります。
そこで、開ける間隔をランダムで変化させ、自然な感じで間を開けるようにすることもあります。
以下のコードは3秒~8秒の間、処理を中断させるコードです。
function wait(){ // 3000ミリ秒から8000ミリ秒の間でランダムな値を計算 let randomTime = Math.floor(Math.random() * (8000 - 3000 + 1)) + 3000; console.log('Hello'); Utilities.sleep(randomTime); console.log('Bye'); }
「Utilities.sleep」は指定した時間、処理を中断させる関数です。
「Utilities.sleep」はミリ秒単位で指定するため、「randomTime 」を設定する際にも3秒を3,000ミリ秒、8秒を8,000ミリ秒として処理しています。
このようにして、処理を中断させる時間をランダムで変化させることが可能です。
練習問題
上記の「Hello」と「Bye」を出力する処理を5回繰り返すプログラムを作成してください。
作成できたら、実行して、1回ごとに出力される間隔が異なることを確認します。