(* ----------------- サンプル Hello World ---------------- *) (* 文字列操作用クラスライブラリの読み込み *) need string (* ----------- クラス定義 ---------- *) :class Beginner super{ object } string title (* インスタンス変数定義 *) (* ----------- クラス実装 ---------- *) :m CLASSINIT: (* コンストラクタに相当 *) " Hello World" put: title ;m :m setTitle: ( addr n -- ) put: title ;m :m sayHello: print: title cr (* コンソールへ改行付きで出力 *) ;m ;class (* 静的にインスタンスを定義、生成 *) beginner aMan (* 動的にヒープに生成したインスタンスへアクセスするための ハンドルを定義、生成 *) objhandle hMan (* インスタンスへのポインタを定義、生成 *) objptr pMan class_is Beginner (* ----------- メインコード ---------- *) : GO sayHello: aMan (* Hello World *) " Hello World1" setTitle: aMan sayHello: aMan (* Hello World1 *) ['] beginner newobj: hMan (* 動的にヒープへインスタンスを生成 *) " Hello World2" setTitle: [ obj: hMan ] (* 動的バインドの例 *) sayHello: [ obj: hMan ] (* Hello World2 *) obj: hMan -> pMan (* ポインタ変数へ代入 *) " Hello World3" setTitle: pMan sayHello: pMan (* Hello World3 *) sayHello: [ obj: hMan ] (* Hello World3 *) release: hMan (* ヒープのインスタンスを解放 *) ; endload (* (* ///////////////////////////////////////////////////////// //インスタンスの初期化 *) beginner aMan あるいは ['] beginner newobj: hMan とすると 自動的にCLASSINIT:が呼ばれる。 (* ///////////////////////////////////////////////////////// //オブジェクト自身を表す表記法 *) :class BBB super{ AAA } :m xxx: ;m :m yyy: ( -- ^obj ) xxx: self (* 自身の別メソッドを呼び出す。 *) yyy: super (* スーパークラスの同一メソッドを呼ぶ *) obj: self (* オブジェクト自身へのポインタを返す self自体はポインタではない *) ;m ;class *)