さらにクラスの面白さを伝えるには?
授業ではenchant.jsを用いたプログラミングを行う上で、クラスを使う便利さをどう伝えるかということなどを昨日の記事に書きました。今日は一歩進んでクラスの継承を利用したらもっと便利でさらに面白いということを書いてみます。
昨日の記事
「もっと」ざっくりとした指示をしたい
昨日の記事では、画面上の白クマが発射した「沢山のボール」vs「沢山の茶クマ」の衝突判定について書きました。
今回は、画面上の白クマが発射した「沢山のボール」vs「沢山の茶クマ(男の子・女の子)」と少し状況が複雑になりました。
ボールのどれか1個と、男の子の茶クマか女の子の茶クマのどちらか1頭が衝突しているかどうかを知るためのプログラムを書くとしましょう。
まず総当たりで判定していく場合は、ボールNo1と茶クマ男No.1が衝突しているかをチェックして、次にボールNo1と茶クマ男No.2、次にボールNo1と茶クマ男No.3、、、、ボールNo1と茶クマ女No.1、次に次にボールNo1と茶クマ女No2と判定をする、、、、判定処理がボールの個数x(茶クマ男の数+茶クマ女の数)となるので、各10個とすると10×(10+10)の200回となります(イコール記述行数ではいという説明は今回も割愛します)。
昨日の記事では、「ボールのどれかと、クマのどれかが当たっている?」というざっくりした記述でOKでした。
今日もOKです。
そう、今日もこれでOKです。
クラスの継承を使えばこれが叶います。ボールクラスとクマクラスが衝突しているか?という記述が出来ます。
種明かしは、茶クマ男と茶クマ女を共通のクラスから派生させます。
茶クマ男と茶クマ女が共通の先祖をもつ親戚関係になったわけです。
親戚関係ということを利用して「ボールのどれかと、クマ一族のどれかが当たっている?」
という書き方が可能になっているのです。
しかも茶クマ男に当たったらマイナス1点、茶クマ女に当たったらプラス1点というような処理の振り分けもシンプルに、if分やswitch分での判定を使わなくてもすることが可能になります。
クラスは奥深いですね。
オブジェクト指向の設計は工夫のし甲斐があってとても面白いですし、開発効率を上げることもできます。
コードやサンプルプロジェクトをご覧になりたい方は、Qiitaのページをご覧ください。
参考にしている書籍