前回更新から時間が経ってしまいました…
引き続き、Mystic#の新しい構文および拡張された構文の一部を紹介します。
今回からは、オブジェクト指向に関わる部分もご紹介します。
・メソッドのオーバーロード new!!
オーバーロードとは、シグネチャ(引数の型や数といった、メソッドを構成する情報)が
異なる同名のメソッドを複数実装できることを言います。
従来はオーバーロード機能はなく、全ソースコード内のより後に記述されたメソッドのみが実際に使われるだけでした。
Mystic#ではオーバーロードをサポートします。
尚、上記の例ではラベル名に _ov0 等と付けていますが、文法上特に意味はありません。
お好きな記述やコーディング規約で命名できます。
・コンストラクタ new!!
コンストラクタは、クラスのインスタンス生成(クラスの実体化)を行うための
特殊なメソッドです。特にコンストラクタを記述しない場合はデフォルトコンストラクタとして
引数無しで作成されます。
このクラスをインスタンス化するコードは次の通りです。
#initialize ディレクティブは従来ではプログラム実行時に何より先に実行されるメソッドを宣言しましたが
Mystic#では全く別の意味(コンストラクタ)を持っていますので、誤用しないでください。
・クラスの継承 new!!
クラスの継承とは、既存のクラスの機能を引き継いで新しいクラスを作る機能のことです。
まず基本クラスを作成します。
次に、このクラスに Test2 メソッドを追加した新たなクラスを作成します。
Feat キーワードで継承するクラス名を記述します。このキーワードは
同時にインタフェースの実装にも使用しますが、インタフェースの項で解説します。
・メソッドのオーバーライド new!!
従来はオーバーライドという名の全く異なる機能しかなく、オブジェクト指向とはほど遠いものでした。
Mystic#ではオブジェクト指向としてのオーバーライドをサポートします。
オーバーライドとはクラスを継承する際に使用するものなので、まず基本クラスを作成します。
Test メソッド名の頭に -> という記号が付いているのに気付くと思います。
これは、継承した派生クラスに対しオーバーライドを許可するための修飾子です。
その他の言語のような、英単語になっていないため分かりづらいように思えますが
「このメソッドは他から乗っかられます」と言っているような記号のため、慣れれば非常にシンプルで分かりやすくなります。
次に派生クラスを作成します。
こちらでは -> という記号がメソッド名の後ろに付いています。
「同名メソッドに乗っかります」という意味になります。
また、.NETのオブジェクト指向ではオーバーライドしたメソッドは必然的に
オーバーライドされるメソッドにもなります。
よってMystic#では以下のような(冗長的な)記述もできます。
引き続き、Mystic#の新しい構文および拡張された構文の一部を紹介します。
今回からは、オブジェクト指向に関わる部分もご紹介します。
・メソッドのオーバーロード new!!
オーバーロードとは、シグネチャ(引数の型や数といった、メソッドを構成する情報)が
異なる同名のメソッドを複数実装できることを言います。
従来はオーバーロード機能はなく、全ソースコード内のより後に記述されたメソッドのみが実際に使われるだけでした。
Mystic#ではオーバーロードをサポートします。
#program [Sample]
#method [Main, String, *~Main, Integer] As Global
#method [Test, *~Test_ov0] As Local
#method [Test, Integer, *~Test_ov1] As Local
*~Main
Me.Test
Me.Test [4]
Console.ReadKey [True]
MethodReturn
*~Test_ov0
Console.WriteLine ["引数なし"]
MethodReturn
*~Test_ov1
Console.WriteLine ["引数は {0} です。", Argument0]
MethodReturn
#method [Main, String, *~Main, Integer] As Global
#method [Test, *~Test_ov0] As Local
#method [Test, Integer, *~Test_ov1] As Local
*~Main
Me.Test
Me.Test [4]
Console.ReadKey [True]
MethodReturn
*~Test_ov0
Console.WriteLine ["引数なし"]
MethodReturn
*~Test_ov1
Console.WriteLine ["引数は {0} です。", Argument0]
MethodReturn
尚、上記の例ではラベル名に _ov0 等と付けていますが、文法上特に意味はありません。
お好きな記述やコーディング規約で命名できます。
・コンストラクタ new!!
コンストラクタは、クラスのインスタンス生成(クラスの実体化)を行うための
特殊なメソッドです。特にコンストラクタを記述しない場合はデフォルトコンストラクタとして
引数無しで作成されます。
#class [TestClass]
#initialize [Integer, *~Init]
Var Integer [_test] As Local
*~Init
_test = Argument0
MethodReturn
#initialize [Integer, *~Init]
Var Integer [_test] As Local
*~Init
_test = Argument0
MethodReturn
このクラスをインスタンス化するコードは次の通りです。
#program [Sample]
#method [Main, String, *~Main, Integer] As Global
*~Main
Var TestClass [tClass]
tClass = CreateObject[TestClass, 3]
MethodReturn
#method [Main, String, *~Main, Integer] As Global
*~Main
Var TestClass [tClass]
tClass = CreateObject[TestClass, 3]
MethodReturn
#initialize ディレクティブは従来ではプログラム実行時に何より先に実行されるメソッドを宣言しましたが
Mystic#では全く別の意味(コンストラクタ)を持っていますので、誤用しないでください。
・クラスの継承 new!!
クラスの継承とは、既存のクラスの機能を引き継いで新しいクラスを作る機能のことです。
まず基本クラスを作成します。
#class [BaseClass]
#method [Test, *~Test] As Global
*~Test
Console.WriteLine ["基本クラスのTestメソッドです。"]
MethodReturn
#method [Test, *~Test] As Global
*~Test
Console.WriteLine ["基本クラスのTestメソッドです。"]
MethodReturn
次に、このクラスに Test2 メソッドを追加した新たなクラスを作成します。
#class [DerivedClass]: Feat[BaseClass]
#method [Test2, Integer, *~Test2] As Global
*~Test2
Console.WriteLine ["派生クラスの Test2 メソッドです。n渡された値は {0} です。", _
Argument0]
MethodReturn
#method [Test2, Integer, *~Test2] As Global
*~Test2
Console.WriteLine ["派生クラスの Test2 メソッドです。n渡された値は {0} です。", _
Argument0]
MethodReturn
Feat キーワードで継承するクラス名を記述します。このキーワードは
同時にインタフェースの実装にも使用しますが、インタフェースの項で解説します。
・メソッドのオーバーライド new!!
従来はオーバーライドという名の全く異なる機能しかなく、オブジェクト指向とはほど遠いものでした。
Mystic#ではオブジェクト指向としてのオーバーライドをサポートします。
オーバーライドとはクラスを継承する際に使用するものなので、まず基本クラスを作成します。
#class [BaseClass]
#method [->Test, Integer, *~Test] As Global
*~Test
Console.WriteLine ["基本クラスです。"]
MethodReturn
#method [->Test, Integer, *~Test] As Global
*~Test
Console.WriteLine ["基本クラスです。"]
MethodReturn
Test メソッド名の頭に -> という記号が付いているのに気付くと思います。
これは、継承した派生クラスに対しオーバーライドを許可するための修飾子です。
その他の言語のような、英単語になっていないため分かりづらいように思えますが
「このメソッドは他から乗っかられます」と言っているような記号のため、慣れれば非常にシンプルで分かりやすくなります。
次に派生クラスを作成します。
#class [DerivedClass] : Feat [BaseClass]
#method [Test->, Integer, *~Test] As Global
*~Test
Console.WriteLine ["派生クラスです。"]
MethodReturn
#method [Test->, Integer, *~Test] As Global
*~Test
Console.WriteLine ["派生クラスです。"]
MethodReturn
こちらでは -> という記号がメソッド名の後ろに付いています。
「同名メソッドに乗っかります」という意味になります。
また、.NETのオブジェクト指向ではオーバーライドしたメソッドは必然的に
オーバーライドされるメソッドにもなります。
よってMystic#では以下のような(冗長的な)記述もできます。
#class [DerivedClass] : Feat [BaseClass]
#method [->Test->, Integer, *~Test] As Global
*~Test
Console.WriteLine ["派生クラスです。"]
MethodReturn
#method [->Test->, Integer, *~Test] As Global
*~Test
Console.WriteLine ["派生クラスです。"]
MethodReturn