クラス型
オブジェクト指向の中心となるクラスを表します。define-class で定義されます。
Curlでプログラムを書くということは、多くの場合クラスの実装になります。プリミティブ型との大きな違いは、クラスはデータとメソッド(振る舞い)の両方を持つことです。また、多くのクラスは、ひな形(クラス定義)から、インスタンスを生成して使用します。
クラスについて説明をするのは、ほぼオブジェクト指向言語の説明になってしまいますので、ここでは、Curlの特徴的な部分についてのみ触れておきます。
多重継承
最近のオブジェクト指向言語の多くが1つのクラスのみを継承できる単一継承ですが、Curlは複数のクラスを継承できる多重継承をサポートしています。
パラメータ化クラス
クラス設計をするときには取り扱える型を指定せず、プログラマの使いたい型を指定して利用するクラスをパラメータクラスと言います。コレクションフレームワークなどで威力を発揮します。Javaではジェネリックスと呼ばれています。
Objectクラスを暗黙の継承とする
多重継承ではありますが、必ずObjectクラスを継承します。メソッドのオーバーライドは可能ですが、オーバーロードはサポートしていません。
プロシージャ型
プリミティブ型とは反対に、データを持たずに、メソッドだけを記述するのがプロシージャです。define-proc で定義されます。プロシージャ型もオブジェクトです。配列やハッシュテーブルに入れることができます。一般的にはクロージャと呼ばれています。Curlの特徴的な点は以下のとおりです。
複数の引数指定方法を持つ
位置パラメータ、キー付きパラメータ、残余パラメータと豊富な引数指定方法を持ちます。
複数の値の戻り値を返せる
戻り値を複数返すことができます。ポインタを使わない1つの値のみしか返せない言語では、戻り値用のクラスを作ったりしなければなりませんが、Curlは簡単に複数の値を返せます。