入門編『オブジェクト指向』
「さて次は『配列』の勉強をしようか」
そう宣言した魔導書に、エイダが猛烈な抗議の声を上げた。
「文字とか数字とかもう嫌だ。疲れた〜。魔法教えてよ」
駄々を捏ねるエイダに、魔導書も困ったように諭す。
「後少しでjavascriptの大まかな基礎が終わるんだが、もうちょっと頑張れないか?」
「うん、頑張れない」
「そうか」
魔導書はブツブツと考え込む。
「まぁ、今まで習った事でも、魔法の行使は可能か。復習という意味でも悪くないか」
魔導書は方針を決め、宣言する。
「よし、魔法の勉強をしよう」
「やった〜」
エイダは両手を上げて、歓喜の声を上げる。
「今教えられる魔法は『加速』の魔法だ。これはエイダがジャイアントスパイダーを倒す時に使った魔法だ」
「うんうん」
javascriptの時より食い付きが良いエイダに、苦笑いしながら魔導書は続ける。
「術式はこうだったかな?」
スクリプトが画面に綴られていく。
<SCRIPT>
master.onthrow=function(event){
var stone=event.projectile;
var ax=100*stone.vx;
var ay=100*stone.vy;
var az=100*stone.vz;
stone.accelerate(ax,ay,az);
}
</SCRIPT>
「えっと?」
エイダは少し困った顔をする。半分理解し、半分わからない状態だ。
「順を追って説明する。まず初めに、この『master』とはエイダの事だ。マスター登録した時に、masterという変数にエイダを登録した」
エイダは思い出す。
「魔導書に手を置いた時?」
「そうそう。確かあの時はこの術式を使った」
<SCRIPT>
document.onmousedown=function(event){master=event.user;}
</SCRIPT>
魔導書は術式を書きながら呟く。
「あれ? こっちの方が説明しやすいな。これから説明しても良いか?」
「うん、いいよ」
「documentは日本語で書類という意味。javascriptの場合、今閲覧している魔導書の1ページを表す物だ」
「オブジェクト?」
エイダは首をかしげる。
「そう。『ページ』『魔導書』『エイダ』等が物だ。それらのオブジェクトには『色』『重さ』『位置』などの特質がある。」
「プロパティ?」
エイダは首を反対側にかしげる。
「例えばエイダなら、ヒットポイントというプロパティがある。生命力がどの位あるかのおおよその数値で、これが0になると死ぬ」
<SCRIPT>
alert("エイダのHPは"+master.hit_point+"です。");
</SCRIPT>
『エイダのHPは10.6です。』と画面に表示された。魔導書は説明を続ける。
「オブジェクトのプロパティを指定する場合は [オブジェクト名].[プロパティー名] で利用できる。
「なんか変数みたい」
「『そのオブジェクトに属する変数』の考えで合っている。他にも魔法量や知力もあるぞ」
<SCRIPT>
alert("エイダのHPは"+master.hit_point+"です。");
alert("エイダのMPは"+master.magic_point+"です。");
alert("エイダの知力は"+master.intelligence+"です。");
</SCRIPT>
『エイダのHPは10.6です。』
『エイダのMPは3.1です。』
『エイダの知力は44.0です。』
エイダは何か良いアイデアが閃いたのか、嬉しそうに魔導書に発表する。
「変数だったら代入演算子で、数を変えることが出来るんじゃないかな?例えば」
エイダは楽しそうに術式を編集する。
<SCRIPT>
master.hit_point=999999999999999999;
master.magic_point=999999999999999999;
master.intelligence=999999999999999999;
alert("エイダのHPは"+master.hit_point+"です。");
alert("エイダのMPは"+master.magic_point+"です。");
alert("エイダの知力は"+master.intelligence+"です。");
</SCRIPT>
「これで私、凄い魔導師になれちゃうかも?」
自慢げなエイダに、魔導書も肯定的に答える。
「良いアイデアだと思うぞ。実際に実行してみよう」
『エイダのHPは10.6です。』
『エイダのMPは3.1です。』
『エイダの知力は44.0です。』
前回と同じ値が表示された。
「あれ? 変わらない?」
魔導書は、今起きた現象について説明する。
「普通のプロパティーだったら『読み書き』できるのだが、HPやMP等のステータスに関しては『読む』しか出来ないんだ。それらのプロパティーには防護処理がかかっている」
「なんだ〜」
エイダは残念そうに肩を落とす。
「それにこれらのステータスはただの指標だ。例えばHPは『体力』『健康状態』『傷の具合』『毒の存在』など色々な事柄を考慮されて計算される値であって、HPそのものには何の効力はない。仮にHPの値を変えられたとしても、心臓を刺されていれば死ぬ」
「そっか……ってあれ?」
エイダはふと気がついた。
「魔法教えてくれるって言ったのに、結局数値ばっかりだ」
「うん、そうだな。この後ちゃんと教えるから、我慢我慢」
「む〜」
不満げに唸りながら、エイダは我慢するしかなかった。
ーーーーーーーー ログ ーーーーーーーーーー
エイダは『オブジェクト』を理解した。
エイダは『プロパティ』を理解した。
『オブジェクト指向』スキルがLV1になった。
ーーーーーーーーーーーーーーーーーーーーーー
登場人物
エイダ・ラブレス
冒険者に憧れている9歳の普通の女の子。
魔法を使いたくてウズウズしている。
職業:術者 LV1
称号:初心者
スキル:『関数 LV3』『構文 LV1』『文字列 LV1』『コメント LV1』『算術演算子 LV1』『文字列演算子 LV2』『変数 LV1』『代入演算子 LV1』『オブジェクト指向 LV1 new』
関数:『alert()』
HTMLタグ:『<script>』
喋る魔導書
エイダが森の奥で出会った喋る魔導書。
基礎をちゃんと教えてくてウズウズしている。
作者より
そう簡単には俺TUEEEEさせる気はありません。世知辛い世の中です。
1話〜3話からスクリプトをコピペしようと思ったら、加速の魔法スクリプトに間違いを見つけました。
<SCRIPT>
master.onthrow(event){
[加速のコード]
}
</SCRIPT>
と書いてありましたが、正しくは:
<SCRIPT>
master.onthrow=function(event){
[加速のコード]
}
</SCRIPT>
初歩的なミスで、かなり恥ずかしいです。それも一ヶ月以上は放置していた。当たり前ですが、魔法に属する『関数』『変数』『オブジェクト』はないので、実際に動作チェックできないのが悩みの種です。簡易的なインチキmasterオブジェクトを作くろうかなと考えています。
またmaster登録する時にdocument.onclickのイベントを使っていましたが、これは一旦ページに触れて手を離さないといけない。ストーリー的にはページに触れたままで登録されてるっぽいので、onmousedownを使おうか、『手を離してくれ』の台詞を入れるかにしないとダメな事案でした。結局onmousedownに変更しました。
参考にしたページ
JavaScriptのプロパティディスクリプタ。 read onlyプロパティに関して。
https://qiita.com/hosomichi/items/db5c501272b622fdd848
jsfiddle
ステータス表示
https://jsfiddle.net/AkiraMeru/bxubthgz/
ステータス改変できず
https://jsfiddle.net/AkiraMeru/bxubthgz/1/




