ユーザ用ツール

サイト用ツール


oop:aboutclass

クラス・オブジェクトについて

資料

概要

クラスまたはオブジェクトは、Miniscriptにおいては親を指す特別な __isa エントリを持つマップです。

また、ドット構文で呼び出された関数は、呼び出されたオブジェクトを参照する自己変数を取得します。


説明

正直クラスの概念は理解が難しいので、特に使う予定が少なければ最初は読み飛ばしても大丈夫です。

が、情報がないと困る(特に自分)ので、書いておきます。

Miniscriptにおけるクラスは、ここでは「特殊なマップ変数」という扱いになります。

通常のmapと違って特殊なのは、以下の内容です。

  • 各種変数・関数の呼び出し方が「class.変数」「class.関数」となっていること
  • 「__isa」というエントリーが存在していること

__isaは、マップの基本クラスを参照する特別なエントリーという位置づけになっております。

クラスから作成したインスタンスでは、この基本クラスの情報を参照して関数を呼び出したり、変数として取り扱う際の情報を参照する位置づけになります。

サンプルに__isaの内容を呼び出すプログラムも書いてみました。

サンプル

shape={"sides":0}      //クラスが持ってる変数の定義。(マップとして定義する)
square = new shape     //先程定義した変数をクラスと見てインスタンスを作成
square.sides=3         //作成したインスタンスのメンバ変数を書き換え
square                 //インスタンスの情報を表示
square.__isa           //__isaエントリを確認。今のところメンバ変数sidesのみ記載
x=new square           //さっき作ったインスタンスをクラスと見てインスタンスを作成(継承の取り扱い)
print x.sides          //継承したインスタンスのメンバ変数を表示
shape.puresq=function  //メソッド(関数)の定義。言ってしまうと「クラスを作ってしまった後から」クラスに追記することになる
  return self.sides*self.sides    //sidesというメンバ変数の二乗を返す
end function
print x.puresq()       //作成したメソッドをインスタンスから呼び出し
square                 //インスタンスの情報を表示(見かけ変わってないですね)
square.__isa           //__isaにはクラスの情報が書かれている。ここでpuresqメソッドが加わっていることを確認

サンプル出力

oop/aboutclass.txt · 最終更新: 2023/01/14 05:48 by machiaworx