ある晴れた日のことです。一匹のミツハニーが、巣にあまいミツを持ち帰っている途中のことでした。
「今日も大変だね、センターくん」
「だよねー。これでもう十六往復目だよ。ライトくんは?」
「ボクも疲れたよ~。でも、帰ったらまた出かけなきゃいけないんだよね~」
ミツハニーは一つの巣に何百匹も集まって、一緒に暮らします。その巣を統率しているのが、女王様のビークインです。彼らは女王様のために、あちこちからミツを集めてきています。
「僕たちって、ずっとこうやって働き続けるのかな?」
「タブンネ、じゃなくて多分ね。他のミツハニーたちもそう思ってるはずだし」
「分かってるけど、何だかやるせないね~」
てきぱきと働いているミツハニーですが、やっぱり時々こんなことも考えるようです。そうですよね、働いてばかりの人(?)生なんて、ちょっと寂しいですよね。人(?)生にもう少し彩りがあってもいいんじゃないか、そう思っても仕方ないですよね。
「何かいいことがあればいいんだけどな……」
「そうだね。少しくらい、楽しいことがあってもいいと思うんだけど……」
「う~ん……あっ、そうだ! ボク、一つ思い出したことがあるよ!」
「何々、何を思い出したの?」
「ライトくん、教えてよ!」
右にいるライトくんが、何かを思い出したようです。左のレフトくんと真ん中のセンターくんが、ライトくんに期待のまなざしを寄せます。
「えっと、難しい話になるんだけど……」
「大丈夫だよ。難しいことは、語り部さんがやわらかくして書いてくれるからさ」
「そうそう。細かいことは語り部さんに任せちゃえばいいんだよ」
586<3282(み・つ・は・にー)。数値の大きさは絶対なのでした。
「コンピュータの『スクリプト言語』(※1)に、『JavaScript』(※2)って言語があるんだ」
「それは知ってるよ。新しく窓を開いたり、画像にカーソルを当てるとズームさせたりするようにできるんだよね」
「そうそう。『Webページ』(※3)を『動的に表現』(※4)するために使われるんだ」
最初から説明・注釈が必要な単語やら表現を連発しやがってからに!
「それで、JavaScriptっていう言語なんだけど、これがちょっと変わった言語なんだ」
「へぇー。どういう『仕様』(※5)なの?」
「スクリプト言語だから、『コンパイル』(※6)はいらないよね」
どこでこんな知識を仕入れたのでしょうか、レフトくん・センターくん・ライトくんの会話はぴったりかみ合っています。全然ミツハニーらしさがありませんね。
「それもそうだけど、それよりもっとすごいんだよ。なんたってJavaScriptは、『プロトタイプベース』(※7)の『オブジェクト指向プログラミング言語』(※8)なんだから!」
「それって、普通の『クラスベース』(※9)のオブジェクト指向プログラミング言語と、どう違うのさ?」
「名前からすると、『C言語』(※10)とかの『プロトタイプ宣言(関数プロトタイプ)』(※11)みたいに聞こえるけど……」
先生! これはポケモン二次創作小説ですか? いいえ、ケフィアです。
「ちょっと違うよ。プロトタイプベースのオブジェクト指向プログラミング言語は、クラスベースのオブジェクト指向プログラミング言語と違って、『オブジェクト』(※12)や『インスタンス』(※13)を『後から拡張できる』(※14)性質があるんだ!」
「えっ?! オブジェクトやインスタンスを後から拡張できるの?!」
「普通の言語だと、そんなこと絶対できないよね……」
ライトくんの言葉を驚きを持って迎えるセンターくんとライトくん。確かにこれは驚きですね。多分ね。
「そっか……スクリプト言語でも、後から拡張が出来るものがあるんだ……」
「そう! だから僕たちも、頑張ればいつかもっとすごくなれるはずだよ! JavaScriptのオブジェクトみたいに!」
「JavaScriptのオブジェクトが後から拡張できるんだったら、ぼくたちミツハニーがすごくなれない道理がないよね!」
いやその発想はおかしい。どう考えてもおかしい。天地がひっくりかえってもおかしい。
「よーし! 僕たちもいつかJavaScriptのオブジェクトみたいに、後から拡張してもらうぞー!」
「みんな、頑張ろーっ!」
『おーっ!!!』
何もかも間違えたまま、ミツハニーは今日もあまいミツを頑張って巣に持ち帰るのでした。いつかミツハニーがビッグになれる日は来るのでしょうか(※15)。
おしまい(※16)。
※1【スクリプト言語】
コンピュータに処理を行わせるために人間が書くプログラムのうち、基本的に「プログラムを書く」だけで動くようになる言語のこと。JavaScriptや、掲示板等のCGIプログラムで頻繁に使われるPerl・PHPなどが該当する。
※2【JavaScript】
90年代初頭にかけて大きなシェアを誇ったWebブラウザの「Netscape」(ネットスケープ)が搭載した、Webページ向けのスクリプト言語。当初は「LiveScript」(ライブスクリプト)という名称だったが、同じ時期にサン・マイクロシステムズ(現在はオラクルに買収)が開発したプログラム言語である「Java」が注目されていたことと、Netscapeの開発元であるNetscape社とサンが業務提携していたことが重なり、マーケティング上の理由から「JavaScript」に名称が変更された。
※3【Webページ】
Webブラウザに表示される文書。一般的に「ホームページ」と呼ばれるものは、実際には「Webページ」または「Webサイト」を指すことがほとんど。「ホームページ」は本来、Webブラウザの起動時もしくは「ホーム」ボタンを押した際に表示されるWebページのみを指す。「Webサイト」は、特定のドメインまたはディレクトリの配下にあるWebページを統括して指すための呼称。日本国内では「ホームページ」という単語が「Webページ」「Webサイト」「(本来の意味の)ホームページ」をまとめて指すことが多いが、実際には正しい用法ではない。
※4【動的に表現】
特定の条件(時間やユーザの操作)をきっかけとして、何らかの「動き」を見せること。マウスを画像に当てると拡大したり、時間になると画面の色が変わるなど。インターネット上でこの言い方がされる場合、ページの遷移(移動や更新)を伴わず、そのページ内で処理されることを指す場合も多い。
※5【仕様】
動作や挙動について定めたもの。「仕様書」「プログラム仕様」などの文脈で使う。インターネット上では、ソフトウェアの不可解な挙動や明らかなバグを開発者やメーカーが「仕様」と言い張ることを揶揄してネタにすることが多いが、実際には「仕様」という言葉自体にネガティブな意味合いは存在しない。あくまでも、対象となるものの動作や挙動について定めたものに過ぎない。
※6【コンパイル】
ユーザが書いたプログラムを、コンピュータが処理できる形式に変換すること。この作業が必要なプログラム言語を、スクリプト言語の対義語としての意味合いもこめて「コンパイル言語」と呼称することがある。縦横にスライムのような何かを四つ以上並べて消すパズルゲームの開発元の名前は、この単語から取られていると言われている。
※7【プロトタイプベース】
既に存在するオブジェクトを「プロトタイプ」(仮組み)と考え、仮組みに新しい機能を追加したりしてオブジェクトを作るプログラム言語の考え方。メジャーな言語ではJavaScriptがこれに当たる。クラスベースのオブジェクト指向プログラミング言語に比べて、生成されるオブジェクトを後付で拡張して機能を持たせられることが大きな違いとして挙げられる。
※8【オブジェクト指向プログラミング言語】
オブジェクトを生成し、オブジェクト同士を通信させながらプログラミングを行うことを「オブジェクト指向プログラミング」、オブジェクト指向プログラミングを効率的かつ合理的に行う仕組みを言語仕様に備えた言語を「オブジェクト指向プログラミング言語」と呼ぶ。オブジェクト指向プログラミング言語を使わずとも、「オブジェクト指向プログラミング」は可能だが、オブジェクト指向プログラミング言語を用いたほうが良いことは言うまでもない。
※9【クラスベース】
あらかじめ、オブジェクトの「ひな形」になる存在(クラスと呼ぶ)を定義しておき、プログラムの実行時にクラスから実体(インスタンスと呼ぶ)を生成すると言うオブジェクト指向プログラミングの考え方。メジャーな言語では、C++・Java・C#などが該当。一般的に「オブジェクト指向プログラミング言語」と呼んだ場合、こちらのタイプを指すことがほとんど。
※10【C言語】
1970年代に開発されたプログラミング言語。「言語」の付かない「C」と呼ばれることも。あまりにもメジャーな手続き型言語で、情報系の大学や専門学校では「とりあえずC言語から入る」というカリキュラムが今でも組まれている。C言語から派生した言語も多く、C言語の基礎を押さえていれば他の言語の習得も早い、と言われることがある。ハードウェアに近いオペレーティングシステムやデバイスドライバの開発に使用されることが多い。
※11【プロトタイプ宣言】
プログラムから呼び出す「関数」(処理のカタマリのこと)の情報を前もって最初のほうで定義しておき、関数の本体が現れるまでにその関数が呼び出されたとしても、コンパイルを行う「コンパイラ」(Compiler・コンパイルを行うプログラムのこと)が混乱しないようにすること。上記の「プロトタイプベース」とはまるっきり意味が異なるが、あらかじめ「仮組み」を用意しておく、という考え方だけは一致しているので余計にややこしい。
※12【オブジェクト】
やや乱暴に言うと「処理(振る舞い)とデータ(情報)をひとまとめにした」存在。スプーンを持った携帯獣電子工学を専門とする山吹大学の客員教授が挙げた例を引用すると、『ボールペンは「ペン先で書く」「ペン先を出す」「ペン先をしまう」といった処理を持ち、「色は黒」「材質はプラスチック」「インクの残量は半分ほど」といったデータを持っている』というような言い方ができる。振る舞いと情報で、あらゆる物を表現できるという考え方が根底にある。
※13【インスタンス】
クラスベースのオブジェクト指向プログラミング言語で、ひな形であるクラスから作り出された実体のある存在。クラスベースのオブジェクト指向プログラミング言語のプログラミングにおいては、生成したインスタンスをあれこれ操作して処理を行う。クラスが「たい焼きの型」、インスタンスが「たい焼き」と考えると分かりやすい。うぐぅ。
※14【後から拡張できる】
プロトタイプベースのオブジェクト指向プログラミング言語の最大の特徴。クラスベースのオブジェクト指向プログラミング言語では、生成元のクラスに定義されている機能だけが備わっており、後から拡張することはできないが、プロトタイプベースのオブジェクト指向プログラミング言語は、プロトタイプから作り出したオブジェクトに後から別の機能を追加することができる。この概念が、クラスベースとプロトタイプベースという二つのオブジェクト指向プログラミング言語を分けている。
※15【いつか彼らがビッグになれる日は来るのでしょうか】
ちなみに、彼らの性別は♂。
※16【おしまい】
オチてない。
※この物語はフィクションです。実在の人物・団体名・事件とは、一切関係ありません。
※でも、あなたがこの物語を読んで心に感じたもの、残ったものがあれば、それは紛れも無い、ノンフィクションなものです。