モジュール
継承、インターフェイスと直接かかわりがあるわけではありませんが、ベータ2にて変更された機能の追加説明として、モジュールについて解説したいと思います。
モジュールとは、クラスや値などのコードのグループのことで、関連したコードをグループ化したり、オブジェクトの名前の重複による問題を解決したりするのに使用されます。名前空間には値やファンクションを直接宣言できないため、それらを宣言したモジュールを含めます。クラスやdo式は直接名前空間に含めることが可能です。
モジュールはライブラリとして、別ファイルにxxx.fsという形式で保存します。同じプロジェクト内のファイルからこのコードを呼び出す際には、作成されたdllファイルを参照として追加し、修飾名を使用するか、モジュールをopenします。修飾名の使用とは、例えば、testModuleというモジュールのtestMethodというメソッドを使用する場合、testModule.testMethodというようにメソッド名の前にモジュール名とドットをつけます。
// トップレベルモジュール宣言 module [アクセス修飾子] [名前空間.]モジュール名 宣言 // ローカルモジュール宣言 module [アクセス修飾子] モジュール名 = 宣言
トップレベルモジュールはそのファイル内すべてが対象で、1つのファイルに複数のモジュールを宣言する場合には、ローカルモジュール宣言を使用します。
//toplevelModule.fsというファイルに以下のコードを記述してライブラリとして保存 module toplevelModule let testMethod x y = x + y
//モジュール名.メソッド名 let testItem = toplevelModule.testMethod 2 3 // // もしくはファイルのトップにてモジュールをopenする //open toplevelModule //let testItem = tesstMethod 2 3 Console.WriteLine(testItem);;
今バージョンから、F#のモジュール用の.fsファイルはすべてトップにモジュールの宣言(名前空間の場合は名前空間の宣言)を必要とするようになりました。
今バージョンでは、メソッドに異なる種類のパラメータを渡す場合に使用するOverloadID属性の設定が不要になるなど属性に関する機能などの変更はあったようですが、今後重複機能の削除以外にはソースレベルの変更は行わない予定のようです。
まとめ
今回はF#のオブジェクト指向の一部分である継承とインターフェイスについて紹介しました。従来のオブジェクト指向と概念的に大きな違いはありませんが、オブジェクトの宣言、実装における小さな違いを覚えて上手に使いこなしてください。次回は「F#のクラス拡張」について、解説予定です。