クラス定数、変数およびプロシージャ

クラス変数はクラス内で定義されているグローバル変数です。クラス定数はクラス内で定義されているグローバル定数です。クラス プロシージャはクラス内で定義されているプロシージャです。クラス変数、定数およびプロシージャを使用して、グローバル名前空間の識別子の数を減らすことができます。
またクラス変数、定数およびプロシージャを使用して、関連するコードをグループ化してコードを整理することができます。さらに、クラスのアクセス属性を使用してクラス変数、定数またはプロシージャへのアクセスを制御できます。
クラス内のフィールド、アクセッサ、オプションおよびメソッドはクラスの個々のインスタンスとそれぞれ関連しています。クラス変数、クラス定数およびクラス プロシージャ全体としてクラスに関連付けられています。
クラス変数、定数およびプロシージャはサブクラスには継承されません。クラス変数、定数またはプロシージャが定義されているクラスから継承して新しいクラスを作成した場合、作成したクラスはクラス変数、定数またはプロシージャを継承していません。
クラス変数、定数およびプロシージャは、グローバル変数、定数またはプロシージャと同じ構文を使用して定義されます。唯一の違いは、これらの宣言をクラス定義内で行う必要があることです。グローバル変数と定数の構文は、「変数:グローバル変数と定数の宣言」を参照してください。プロシージャの構文は「グローバル プロシージャの定義」を参照してください。 クラス変数およびリフレクションは 「クラス変数」 を参照してください。
たとえば、次のコードでは MyClass というクラスを定義し、my-var というクラス変数、my-const というクラス定数、my-proc というクラス プロシージャを含みます。
{define-class MyClass
  || A class variable.
  let my-var:int

  || A class constant.
  def my-const = 42

  || A class procedure
  {define-proc {my-proc}:String
    {return "A class procedure has been called"}
  }
}
次の構文を使用して、定義されたクラス変数や定数を参照したり、クラス プロシージャを呼び出します。
構文:class-name.item-name
説明:
class-nameクラスの名前です。
item-nameクラス変数、定数またはプロシージャの名前です。
クラス変数、定数およびプロシージャへのアクセスは、クラスのアクセス属性とクラス変数、定数またはプロシージャのアクセス属性によって決まります。クラス変数、定数またはプロシージャにアクセスするときには必ずクラス ネームを指定します。次の例で示されるように、同じクラス内で定義されているクラス変数、定数またはプロシージャをアクセスするときでも、クラス ネームを提供する必要があります。

例: クラス変数、定数およびプロシージャの定義
{define-class public MyClass
  || Define a class variable.
  let public total:int = 0

  || Define a class constant.
  def public points = 6

  || Define a class procedure.
  {define-proc public {add-points}:void
    {set MyClass.total = MyClass.total + MyClass.points}
  }
}
Starting total is ... {value MyClass.total}

|| Call class procedure twice
{MyClass.add-points}
{MyClass.add-points}

New total is ... {value MyClass.total}