指定した回数だけ繰り返す
今回は、JavaScriptの学習です。
ただし、アルゴリズムの話なので、JavaScriptだけに限らず、あらゆるプログラミング言語にも適用できます。
ボクが単に、感心したので、備忘録として書いておきますね。
次のコードです。
HTML
<input type="number" value="5" id="def" max=100 min=1>
<button onclick ="count()">押す</button>
<p id="number"></p>
JavaScript
var num = 1;
function count() {
var total = document.getElementById("def").value;
var a = document.getElementById("number");
a.textContent = num;
num = ++num % total;
}
余りは繰り返す
これ、恐らく、プログラミングの世界では常識なんでしょうけど、学習中のボクとしては初見だったので、なるほどと思いました。
上記のプログラムを実行すると、
5と言う数字とボタンが表示されます。
(ホントは実際にこのページに実装すれば良いんですが、この、はてなブログではなぜかうまく動きませんでした。)
5と表示されている場合は、ボタンを押すたびに、
0→1→2→3→4→0→1→2→3→4→
と繰り返します。
数字を8に変更すれば、0から7までになります。
やっていることとしては、数字を1ずつ足していって、指定した値に到達すれば0に戻す、それを繰り返すだけです。
ボクが、なるほど、と思ったのは、if文を使っていない点です。
ポイントとなる文は、
num = ++num % total;
です。
numが現在の数値、totalが指定値です。
これ、たぶん、プログラムの世界では常識のアルゴリズムなんでしょうね。
初心者のみなさん、これを見て、何をやっているか、わかりますか?
具体的に数字を入れて考えるとわかりやすいです。
例えば、
- num = 2
- total = 8
としましょうか。
++は1を加算する演算子なので、まずnumが先に2増えて3になりますね。
そして、%は余りを求める演算子。
よって、3を8で割った余りは3。
なので、numは3になるので3が表示されます。
あとはこれの繰り返し。
次回は、numは3から4に増えるので、余りは4。
なので、4が表示されます。
そうやって繰り返して、numがtotalの値つまり8に到達すれば、余りは0になります。
0が表示されるわけです。
そして、numが9になれば、余りは1ですね。
結局、numを1ずつ加算していくたびに、余りは
0→1→2→3→4→5→6→7→0→1→2→3→
と繰り返すわけです。
単に加算していくだけなら、
num++
とか、
++num
で済むんですが、上記の方法なら、if文を使わなくても、演算だけで、自動的に指定値の繰り返し(0に戻る)が実現できます。
数十年前、ボクがBASIC言語でプログラミングしていた頃、if文は処理速度が低下するから、なるべく論理演算で行うように、と学んだ記憶があります。
今、JavaScriptを学習中にまさに遭遇しました。
中級者以上の人にはささいなことでしょうが、ボク的には感激。
と言うわけで、ここに記しておきました。