クラスの作り方
Curlは、オブジェクト指向プログラミングを実践できる言語です。変数とプロシージャ(属性と振る舞い)をカプセル化したクラスを作ることができます。VB 6.0でも、クラスモジュールとしてクラスを作ることができます。例えば、リスト4は、円を表すMyCircleクラスをVB 6.0で作成したものです。MyCircleクラスのメンバには、円の座標を表すx、y、および半径を表すrという変数と、円の面積を返すGetAreaというプロシージャがあります。
Public x As Double ' 中心位置のx座標 Public y As Double ' 中心位置のy座標 Public r As Double ' 半径 ' 面積を返すプロシージャ Public Function GetArea() As Double GetArea = Me.r * Me.r * 3.14 End Function
これと同様のクラスをCurlで作るとリスト5のようになります。
{define-class public MyCircle field public x:double || 中心位置のx座標 field public y:double || 中心位置のy座標 field public r:double || 半径 || 面積を返すプロシージャ {method public {get-area}:double {return self.r * self.r * 3.14} } || コンストラクタ {constructor {default x:double, y:double, r:double} set self.x = x set self.y = y set self.r = r } }
VB 6.0では、クラスモジュールの中にコードを記述することでクラスを作成しますが、Curlでは任意のソースコードの中でクラスを作成できます。{define-class public MyClircle・・・} の中に変数とプロシージャを記述するのです。クラスのメンバである変数を「フィールド」、プロシージャを「メソッド」と呼びます。publicの意味は、VB 6.0と同様です。selfは、VB 6.0のMeに相当します。コンストラクタという特殊なメソッドの役割は、すぐ後で説明します。
オブジェクトを生成する方法
クラスはオブジェクトを生成して使います。これはVB 6.0とCurlで同様です。
リスト6は、MyCircleクラスのオブジェクトcを生成し、フィールドx、y、rに適当な値を代入してから、GetAreaメソッドを呼び出すVB 6.0のコードです。c.x、c.y、c.rでフィールドを参照し、c.GetAreaでメソッドを呼び出します。この「オブジェクト名.メンバ名」という構文は、後で紹介するCurlのコードでも同様です。このドットを「~の」と読むとわかりやすいでしょう。c.xなら「オブジェクトcのフィールドx」、c.GetAreaなら「オブジェクトcのGetAreaメソッド」です。
' オブジェクトを生成する Dim c As MyCircle Set c = New MyCircle ' フィールドに適当な値を代入する c.x = 100 c.y = 200 c.r = 10 ' メソッドを呼び出す MsgBox c.GetArea()
VB 6.0と同様のコードをCurlで記述すると、リスト7のようになります(実行結果を図3に示します)。このコードは、MyCircleクラスと同じソースコードの中に記述できます。
|| オブジェクトを作成する {let c:#MyCircle} {set c = {MyCircle 100, 200, 10}} || メソッドを呼び出す 円の面積は、{value {c.get-area}}です!
注目してほしいのは、{set c = {MyCircle 100, 200, 10}} の部分です。クラス名MyCircleに続けて指定されている3つの数値は、それぞれフィールドx、y、rに代入されます。これを実現しているのが、コンストラクタという特殊なメソッドです。VB 6.0のコードに比べてCurlのコードでは、コンストラクタがあるお陰でオブジェクトのフィールドへの値の代入が容易に実現できます。
コンストラクタ以外にも、Curlには本格的なオブジェクト指向プログラミングを実現するための便利な構文が数多く用意されています。ただし、オブジェクト指向プログラミングを強要しないところが、Curlのよいところだと言えるでしょう。
おわりに
前回と今回の2回に渡って、Curlの言語構文の概要を説明してきましたが、いかがだったでしょう。「はじめてソースコードを見たときはとても難解に思えたが、ノリさえつかめれば使いこなせそうだ」と感じていただけたでしょう。
さて、次回はCurlを使って、ちょっと凝ったユーザーインターフェースを作る方法を紹介します。Curlのセールスポイントは、なんたって「インターネット時代のリッチクライアントアプリケーション開発ツール」なのですから、凝ったユーザーインターフェースを容易に作れる仕掛けがたくさん用意されています。