やさしいインスタンス

よく耳にするようになったのが、インスタンスやサブクラス。
前者は、一時はダサすぎる語彙なので消えていたが、いつの間にか復活し、しかも一般用語化していた。主な理由はやはりjavascriptのinstanceofのせいだと思う。
インスタンスの意味は「実例」、クラスのままではソース上ではあまり使い道が無く(*1)、new でオブジェクトを作らないといけないので、クラス定義されたオブジェクト・タイプの変数に入れるオブジェクト自体を意味するようになっていた。
しかしながら、A instanceof Bの云わんとするところのinstanceは、Bのクラスを型紙(extends)にしてAのクラスを実装したのかを問うているのであり、変数自体は全く眼中にないが、大抵は、A(変数名)  instanceof B(クラス名)  と書くので、勢いA変数のことをinstanceと直結してしまったのは、致し方ないとは思う。勘違いは設計者の語彙の問題であり利用者に問うものではない。
とは云うものの、当初は「オブジェクト」の方が「見た目がダサい」ので「インスタンス」と云い始めていた程度でしかなく、早々に廃れたので余りのくやしさに必死で復権を試みた人の成果なのかもしれない。
もっとも、何かの言語系の実装を作ってみたことがあるなら、何かのクラスをnewする時はオブジェクトぐらいで十分で、何かの処理系をnewするならインスタンスと区別したくなると思う。と云うのも普通にクラス定義する際のnewの実装はほとんど皆無(0行)だが、処理系ともなると半端無い量のソースを書くことになるし、staticなスタートアップコードも遅延処理させれば、new自体の処理時間も長いからだ。newをコードしないクラスなんて、お手軽すぎる。
しかし最近のJavaScriptではprototypeを強引に使って処理系に近い作り方をするもの(身近な例ではjQuery)もあるので、その場合はインスタンスと呼ぶことにはやぶさかではない。だって、マニュアルが無いと、使えないからね。(大笑)
後者は、派生元のクラスをスーパー・クラス(Javaでsuperって書くから)と呼ぶ反動で、スーパー・クラスから派生したクラスを亜綱 という意味でサブクラスといっているようだ。
実際、派生元のクラスをスーパー・クラスに、ちょこっとだけコードを付け足して作るクラスのソースは短いから、サブ(=プチ)クラスというのは意味が通っていそうな気がする。
しかも、Javaのクラスの派生は一子相伝の場合はほとんど無く、大方のスーパー・クラスには派生したクラスがいっぱいある(大家族、子沢山)ので、亜綱なイメージともピッタリ。
但し、「サブ(何とか)」という命名は「プチ(何とか)」とか「ナンチャッテ(何とか)」と同様に現実世界で「乱用されまくり」、その結果、多様されすぎて、サブには多様な意味を持ってしまい、すぐには意味が読み取れない状況にあることから、一般的には「イミフな用語」と化している。
注*1:一般的にはマジック・ナンバー対策として、const あるいはenumとして乱用されている。 例:ソースに2とは書かず、nnnDefinded.mmmType   の様に書く。
 
 




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA