多重継承の解説
以下では「多重継承」のプログラムリストにあらわれるさまざまなワードの解説を行います。
- ★(*
- コメントの始まりを示すワードです。¥と似ていますが、次に*)が現れるまでのすべての文字(改行を含む)がコメントとして扱われます。
- ★:class
- クラス定義を開始するためのワードです。ここではstaticTextというクラスを定義しています。
- ★super{
- 定義されているクラスのスーパークラスを指定するためのワードで、必ず:classワードの直後に使われます。多重継承の場合、複数のスーパークラスを持ちますが、メッセージを投げる優先度の順にクラス名を並べて記述します。
- ★:m
- メソッド定義を開始するワードです。ここではclassinit:というC++などでのコンストラクタに相当するメソッドを定義しています。Mopsではクラス定義とクラス実装は分離することが出来ないので、メソッドは:classと;classの間で定義されなければなりません。
- ★super>
- スーパークラスにメッセージを投げるためのワードです。単にsuperと記述した場合は多重継承したスーパークラスの間の優先度にしたがってメッセージを受け取るスーパークラスが決定されます。メッセージを受け取るスーパークラスを優先度とは無関係に指定したい場合はこのsuper>の直後にそのスーパークラス名を記述します。これらスーパークラスとメソッドのバインドはコンパイル時に静的に決定されるため実行時のオーバーヘッドを気にする必要はありません。(^ ^)
- ★;m
- メソッドの定義を終了するワードです。
- ★(
- じつはこのワードもコメントの開始を意味するワードです。次に現れる)までがコメントとして扱われ、途中に改行をいれることはできません。
Mops(というかForth)にはワードが必要とする引数および返り値の個数や型を明示するための文法がありません。そこでプログラムを理解しやすくするための作法として、ワードが必要とする引数および返り値の個数や型をワードの定義直後にコメントとして記述することが推奨されています。
たとえば、
: HOGEHOGE ( a b -- c )
と記述するとHOGEHOGEというワードはスタック上からaとbという2つの数値を取り出して処理した後、cという数値をひとつスタック上に残す、ということをこの行を見るだけで理解することが出来ます。
戻る