はじめに
2010年2月、Visual Studio 2010 RC(Release Candidate)英語版がマイクロソフトから公開されました。RCに同梱されるF#のバージョンは2.0になります。2009年10月のBeta2移行、重複されていた機能が省かれるなどのマイナー変更はありましたが、その他大きな機能追加などはありません。詳細はリリースノートをご覧ください。
- ダウンロードはこちらから
F#のオブジェクト指向に関する最終回として、今回はオブジェクト式をメインに、ミュータブル/イミュータブルオブジェクト、その他に前回までの連載で省略してきた制約、属性機能の補足説明を行いたいと思います(※注意)。
今回のサンプルスクリプトなどの動作確認は、Beta2日本語版で行っています。
オブジェクト式
オブジェクト式は既存のクラス、インターフェースなどをベースにして、動的に作成された匿名のクラス用にインスタンスを作成します。特別なケースに一度だけ必要なクラスを作成することなく、既存のクラスやインターフェースをカスタマイズするオブジェクト式を使用することで不要なコードを減らすことができます。
オブジェクト式の使用方法
オブジェクト式の使用方法について、まず構文から見ていきましょう。newキーワードでベースとなる既存のクラスを指定します。その後、メンバーを追加します。
// ベースとなるオブジェクトタイプがクラスの場合 { new 既存のクラス名 [型パラメータ] コンストラクタ用引数 with メンバーの定義 [インターフェイス実装] } // ベースとなるオブジェクトタイプがクラス以外のとき { new 既存のオブジェクトタイプ名 [ジェネリックな型パラメータ] with メンバーの定義 [インターフェイス実装 ]
メンバー定義の部分には、既存クラスのメソッドの"override"、もしくは抽象メソッドの定義が入ります。
//ベースとなる親クラスの作成 type testClass() = class end //実装されるインターフェイスの作成 type ItestIntf = abstract x : int //オブジェクト式によるインスタンスの定義 let testinstance = { new testClass() interface ItestIntf with member this.x = 10 };;
▼
type testClass = class new : unit -> testClass end type ItestIntf = interface abstract member x : int end val testinstance : testClass
上記の例は、あるクラス(testClass)を元にして、そのクラスにインターフェース(ItestIntf)を実装したオブジェクトタイプのインスタンス(testinstance)を作成する例です。
newの後に、既存のクラス名を指定し、その後インターフェースを実装し、実際にクラスを作成することなく仮想クラスをインスタンス化しています。