プロパティの実装
abdev 10月 6th, 2006今夜はライブラリ開発者の皆様に待っていただいている機能の一つ、プロパティの実装を行っています。
VB.NETを見習って、Propertyステートメントを・・・となりそうですが、プロパティに関してはD言語の仕様を見習う形での実装を行いたいと考えています。
ABでプロパティを記述したときのソースコードのサンプルイメージを下記に示します。
'------------------------------------------------------- ' D言語の構文を参考にしたプロパティ構文の実装 ' Note: 呼び出し解釈に柔軟性を持たせる '------------------------------------------------------- Class CTest m_label_str As String m_label_i As Long m_table[100] As Long Public Function label() As String 'label.Getアクセサ Return m_label_str End Function Sub label(Value As String) 'label.Setアクセサ m_label_str=Value End Sub Function label() As Long 'label.Getアクセサ Return m_label_i End Function Sub label(Value As Long) 'label.Setアクセサ m_label_i=Value End Sub '配列要素を持たせたプロパティ Function table(e As Long) As Long 'label.Getアクセサ Return m_table[e] End Function Sub table(e As Long, Value As Long) 'label.Setアクセサ m_table[e]=Value End Sub End Class
ん!?これじゃ、普通のメソッドじゃん。プロパティじゃないじゃん。
そう思われる方もいらっしゃるかと思いますが、実はABが実装しようとしているプロパティというのは、呼び出し側(代入・参照側)の解釈を一ひねりし、宣言側は従来のメソッド定義で事足りるようになっているのです。
具体的には代入先、参照先に期待するメンバが存在しなかったときに、コンパイラが下記のような解釈をするようにします。
Getアクセサ:
“a=obj.label” → “a=obj.label()”
Setアクセサ:
“obj.label=b” → “obj.label(b)”
さてさて、週末には実装が完了しますので、早速β版のパッケージングに入っていこうと思います。
Recent Comments