More Related Content
Orange Cube 自社フレームワーク 2015/3 C#や.NET Frameworkがやっていること わんくま名古屋#33(20141115) TDD道場#21 What's hot (20)
C# コーディングガイドライン 2013/02/26 Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines Angularを使ってみる実例いくつか (2015/4/29 GDGKobe) New features of Groovy 2.0 and 2.1 Effective Modern C++ 勉強会#1 Item3,4 FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略 C#coding guideline その2_20130325 Dart / Flutter コードファイルジェネレート入門 Groovy Shell Scripting 2015 Groovy Bootcamp 2015 by JGGUG Code Contracts の紹介
- 2. 自己紹介
• なまえ ゆぽ
• Twitter @yupotown
• 言語 C#, C++, etc.
• 興味 C#, 競プロ, 数学, 音楽ゲーム, etc.
• 高専プロコン勢(サイコロが天敵)
• 勉強会での発表は初めて
2
- 7. 表明の例 – Sqrt
7
public static double MySqrt(double x)
{
Contract.Requires(x >= 0);
Contract.Ensures(Math.Abs(Math.Pow(Contract.Result
<double>(), 2) - x) < eps);
var res = x;
// 計算する
return res;
}
事前条件 (x ≥ 0)
事後条件 (res ^ 2 ≒ x)
- 8. 表明の例 – Sqrt
8
public static double MySqrt(double x)
{
Contract.Requires(x >= 0);
Contract.Ensures(Math.Abs(Math.Pow(Contract.Result
<double>(), 2) - x) < eps);
var res = x;
// 計算する
return res;
}
メソッドを使う側が
気を付ける
メソッドを作る側が
気を付ける
- 11. Code Contractsでできること
• C# で表明が書ける
• using System.Diagnostics.Contracts;
• Contract.Requires() // 事前条件
• Contract.Ensures() // 事後条件
• Contract.Invariant() // 不変条件
• 実行時チェック
• 「引数が事前条件を満たしていなかったら例外」など
11
- 13. 表明の例
• 文字列 str の最後の文字を取得するメソッド
• 事前条件:str は長さ1以上
• 空文字列の最後の文字?
13
public static char GetLast(string str)
{
Contract.Requires(str.Length >= 1);
return str[str.Length - 1];
}
- 18. おまけ – 導入方法
• Contract クラス
• .NET 4.0 あたりからデフォルトで入っています
• バイナリライター ccrewrite.exe
• 静的チェッカー cccheck.exe
• Code Contracts for .NET extension
• http://bit.ly/1coCsib
( https://visualstudiogallery.msdn.microsoft.com/1ec7db13-3363-46c9-851f-
1ce455f66970 )
18