2011-02-25 4 views
3

C#で関数型で記述するとき、クラスが不変で機能が純粋であることを静的に検証するツールはありますか?私はそれが一般的なケースでは不可能であると想像していますが、時間の90%が適切なツールがまだ役立つでしょう。いくつかのC#コードが機能していることを静的に検証する方法は?

すべてのメンバー変数がreadonlyであることをチェックし、すべてのメンバータイプ(およびすべての表示可能なサブタイプ)も(再帰的に)不変であると考えることができます。私は、機能のチェックがどのように動作するのか分かりません。

+1

なぜですか?私がFPを気に入っているのと同じくらい、すでにマルチパラダイム言語を使用しているなら、あなたはそのパラダイムのための唯一のパラダイムに自分自身を制限すべきではありません。純粋な関数と不変のデータ構造は、C + +で非PODクラス(自由な関数なし)しか持たないことが良いOOPコードを保証するので、良いFP-ishコードの保証と同程度です。 – delnan

+2

@delnan - 私はOPがこれをやっているとは思わないでしょう。私は、コードがF#から呼び出されたときに、奇妙な副作用を伴わないC#で関数コードを書こうとする状況を見ることができます。 –

+0

変更可能なオブジェクトの周りを渡すコードを読むとき、私は変更がどこで起こったのか、どこにないのかを知ることは難しいです。突然変異の副作用によるコード間の暗黙の通信は、発見するのが非常に困難です。将来のコードリーダーにとっては、純粋な/不変の注釈は非常に役に立つと思うので、コードベース全体ではなく、FP以外のコードに突然変異や副作用の検索を制限することができます。 – pauldoo

答えて

1

[不変]および[純粋な]注釈は、これに合わせて作成されているようです。 .NET 4.0のDesign by Contractツールを見てください。 IIRCでは、静的検証はVS Ultimateでしか動作しません。

+0

Microsoft Code Contractsについて言及していますか? (http://research.microsoft.com/en-us/projects/contracts/) – pauldoo

+0

修正します。明確にするために編集されました。彼らは、これらの機能のほとんどをC#4.0にロールオーバーしました。 –

+0

属性は開発者によって追加されます。開発者は、この点について信頼する必要があります。私は、OPが「信頼するが検証する」ことを望んでいると思う。 – KeithS

関連する問題