加算すると増えていく
プログラムを書けるようになると言うのは、そのプログラミング言語の文法を知っていると言うコトはもちろん、アルゴリズムを生み出せるコトも非常に重要です。
アルゴリズムはプログラミングの知識よりも思考力の問題です。
ボクはプログラミングの初心者であり、ダラダラと、主に、JavaScriptの学習をしています。
最近知った、ちょっと面白いアルゴリズムを書いてみます。
アルゴリズムと言っても、非常にカンタンな論理演算の話です。
なので、別にJavaScriptじゃなくても、どんなプログラミング言語でも当てはまります。
プログラムでは、例えば、xと言う変数を、
x = x + 1
と書くと、xに1だけ加算されます。
これを繰り返すと、xは、1、2、3、4・・・・・・と増加していきます。
0に戻す
例えば、回転運動で一周させるプログラムを書く場合に、xを角度とすると、xを増加させれば回転し、やがて、xが360になれば一周です。
しかし、さらにxを増加させると、回転運動は続きますが、xは増え続けてしまいます。
x = 10、と、x = 370、と、x = 730、は回転運動としては同じ角度ですが、xの値は異なります。
なので、xが増加して360に到達したときに、xをゼロにリセットするのが望ましいですね。
プログラムにおいて、xが360になったら0にする、と言うのは、
if (x = 360){x = 0;}
と書きます。
これで正解なんですが、ボクは子供の頃、BASICプログラムをしているときに、if文は処理速度が遅いので、なるべく論理演算を使え、と学びました。
その教訓が今のコンピュータに当てはまるのか、今のプログラミング言語に当てはまるのかは知りませんが、実際、上記の処理を論理演算で行う方法があります。
それは、
%
を使う方法です。
%は割り算の余りを求めます。
例えば、
8 % 3
なら、2です。
これを応用すると、xが360になると自動的に0になる論理演算が可能です。
それは、
x = x % 360;
です。
こうすると、xが0から359までなら、そのままxの値になりますよね。
例えば、xが285のときは、
285 ÷ 360 = 0 余り 285
ですから。
そして、xが1ずつ増加して、xが360になった瞬間、余りはゼロになり、すなわち、xはゼロに戻るわけです。
結果として、xは0から360の増加を繰り返します。
たったこれだけのコトですが、ボクは、なるほどなあ、と思ったわけです。
if (x = 360){x = 0;}
と書くか、
x = x % 360;
と書くか。
プログラミングの話と言うより、算数の話ですね。
たぶん、プログラムの高速化と言うのは、こう言うコトの積み重ねでは無いでしょうか。
小学生の頃、ボクは、あらゆる処理をif文では無く論理演算で書くコトに知恵を絞っていました。
懐かしいです。
角度を1度ずつ加算していき、360度回転したらゼロに戻す実例。