Enviar búsqueda
Cargar
基礎からのCode Contracts
•
18 recomendaciones
•
14,146 vistas
Yoshifumi Kawai
Seguir
C#ユーザー会セッション資料
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 35
Descargar ahora
Descargar para leer sin conexión
Recomendados
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
Code Contracts in .NET 4
Code Contracts in .NET 4
信之 岩永
Reactive extensions入門v0.1
Reactive extensions入門v0.1
一希 大田
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
Recomendados
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
Code Contracts in .NET 4
Code Contracts in .NET 4
信之 岩永
Reactive extensions入門v0.1
Reactive extensions入門v0.1
一希 大田
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
信之 岩永
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
Docker friendlyPHP / Laravel
Docker friendlyPHP / Laravel
Kentarou Takeda
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Keisuke Fukuda
Reactive Programming by UniRx for Asynchronous & Event Processing
Reactive Programming by UniRx for Asynchronous & Event Processing
Yoshifumi Kawai
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
Yoshifumi Kawai
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
tnoho
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
Yoshio Hanawa
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
SEGADevTech
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
async/await のしくみ
async/await のしくみ
信之 岩永
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Tetsuya Kaneuchi
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
Yoshifumi Kawai
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
Yoshifumi Kawai
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
Yoshifumi Kawai
Más contenido relacionado
La actualidad más candente
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
Ra Zon
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
信之 岩永
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
Docker friendlyPHP / Laravel
Docker friendlyPHP / Laravel
Kentarou Takeda
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Keisuke Fukuda
Reactive Programming by UniRx for Asynchronous & Event Processing
Reactive Programming by UniRx for Asynchronous & Event Processing
Yoshifumi Kawai
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
Yoshifumi Kawai
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
tnoho
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
Yoshio Hanawa
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
SEGADevTech
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
async/await のしくみ
async/await のしくみ
信之 岩永
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Tetsuya Kaneuchi
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
Yoshifumi Kawai
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
La actualidad más candente
(20)
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
C++ マルチスレッド 入門
C++ マルチスレッド 入門
Docker friendlyPHP / Laravel
Docker friendlyPHP / Laravel
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Reactive Programming by UniRx for Asynchronous & Event Processing
Reactive Programming by UniRx for Asynchronous & Event Processing
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
async/await のしくみ
async/await のしくみ
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
Destacado
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
Yoshifumi Kawai
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
Yoshifumi Kawai
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
Yoshifumi Kawai
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
Unity Technologies Japan K.K.
F# 3.0 Quick Preview
F# 3.0 Quick Preview
igeta
Fluent Feature in F#
Fluent Feature in F#
igeta
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Yoshifumi Kawai
ASP.NET Core のお気に入りの機能たち (docker向け)
ASP.NET Core のお気に入りの機能たち (docker向け)
Takayoshi Tanaka
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Yoshifumi Kawai
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Yoshifumi Kawai
Clash of Oni Online - VR Multiplay Sword Action
Clash of Oni Online - VR Multiplay Sword Action
Yoshifumi Kawai
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
Yoshifumi Kawai
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for Unity
Yoshifumi Kawai
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
Yoshifumi Kawai
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
Unity Technologies Japan K.K.
Destacado
(16)
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
ZeroFormatter/MagicOnion - Fastest C# Serializer/gRPC based C# RPC
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
C#でわかる こわくないMonad
C#でわかる こわくないMonad
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
F# 3.0 Quick Preview
F# 3.0 Quick Preview
Fluent Feature in F#
Fluent Feature in F#
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
ASP.NET Core のお気に入りの機能たち (docker向け)
ASP.NET Core のお気に入りの機能たち (docker向け)
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
Clash of Oni Online - VR Multiplay Sword Action
Clash of Oni Online - VR Multiplay Sword Action
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for Unity
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
Similar a 基礎からのCode Contracts
C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26
Yoshihisa Ozaki
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
Takahiro Yoshimura
C#coding guideline その2_20130325
C#coding guideline その2_20130325
Yoshihisa Ozaki
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪
Yuji Nojima
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
simotin13 Miyazaki
分割と整合性と戦う
分割と整合性と戦う
Yugo Shimizu
プログラミング勉強会 その0
プログラミング勉強会 その0
Hirokazu Fukami
Flutterを体験してみませんか
Flutterを体験してみませんか
cch-robo
コンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのか
gree_tech
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Yoshifumi Kawai
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Atsushi Kambara
T93 com入門
T93 com入門
伸男 伊藤
CruiseControl.NET設置
CruiseControl.NET設置
Kuniaki Igarashi
Inside mobage platform
Inside mobage platform
Toru Yamaguchi
Entity Framework 5.0 deep dive
Entity Framework 5.0 deep dive
Atsushi Fukui
HttpClientModule
HttpClientModule
Kentarou Takeda
111008 silverlight square_datavalidation
111008 silverlight square_datavalidation
Takayoshi Tanaka
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Shintarou Okada
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Preferred Networks
Similar a 基礎からのCode Contracts
(20)
C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
C#coding guideline その2_20130325
C#coding guideline その2_20130325
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
分割と整合性と戦う
分割と整合性と戦う
プログラミング勉強会 その0
プログラミング勉強会 その0
Flutterを体験してみませんか
Flutterを体験してみませんか
コンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのか
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
T93 com入門
T93 com入門
CruiseControl.NET設置
CruiseControl.NET設置
Inside mobage platform
Inside mobage platform
Entity Framework 5.0 deep dive
Entity Framework 5.0 deep dive
HttpClientModule
HttpClientModule
111008 silverlight square_datavalidation
111008 silverlight square_datavalidation
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Más de Yoshifumi Kawai
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSS
Yoshifumi Kawai
A Brief History of UniRx/UniTask, IUniTaskSource in Depth
A Brief History of UniRx/UniTask, IUniTaskSource in Depth
Yoshifumi Kawai
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Yoshifumi Kawai
Implements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNet
Yoshifumi Kawai
Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)
Yoshifumi Kawai
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
Yoshifumi Kawai
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
Yoshifumi Kawai
Memory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native Collections
Yoshifumi Kawai
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Yoshifumi Kawai
Binary Reading in C#
Binary Reading in C#
Yoshifumi Kawai
RuntimeUnitTestToolkit for Unity(English)
RuntimeUnitTestToolkit for Unity(English)
Yoshifumi Kawai
How to make the Fastest C# Serializer, In the case of ZeroFormatter
How to make the Fastest C# Serializer, In the case of ZeroFormatter
Yoshifumi Kawai
Photon Server Deep Dive - View from Implmentation of PhotonWire, Multiplayer ...
Photon Server Deep Dive - View from Implmentation of PhotonWire, Multiplayer ...
Yoshifumi Kawai
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
Yoshifumi Kawai
History & Practices for UniRx(EN)
History & Practices for UniRx(EN)
Yoshifumi Kawai
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
Yoshifumi Kawai
Introduction to NotifyPropertyChangedGenerator
Introduction to NotifyPropertyChangedGenerator
Yoshifumi Kawai
Más de Yoshifumi Kawai
(18)
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSS
A Brief History of UniRx/UniTask, IUniTaskSource in Depth
A Brief History of UniRx/UniTask, IUniTaskSource in Depth
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Implements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNet
Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
Memory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native Collections
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Binary Reading in C#
Binary Reading in C#
RuntimeUnitTestToolkit for Unity(English)
RuntimeUnitTestToolkit for Unity(English)
How to make the Fastest C# Serializer, In the case of ZeroFormatter
How to make the Fastest C# Serializer, In the case of ZeroFormatter
Photon Server Deep Dive - View from Implmentation of PhotonWire, Multiplayer ...
Photon Server Deep Dive - View from Implmentation of PhotonWire, Multiplayer ...
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
History & Practices for UniRx(EN)
History & Practices for UniRx(EN)
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
Introduction to NotifyPropertyChangedGenerator
Introduction to NotifyPropertyChangedGenerator
基礎からのCode Contracts
1.
基礎からの Code Contracts
@neuecc – 2011/5/23
2.
Profile Twitter
=> @neuecc Blog => http://neue.cc/ HNは"neuecc" 読むときは“のいえ”で ドメン繋いだだけで特に意味はなく発音不能のた め(ccは声に出しにくいのでスルーという適当対応) Microsoft MVP for Visual C#(2011/4-) 公開してるラブラリとか linq.js DynamicJson Chaining Assertion DbExecutor <- (ちょっとだけ)Code Contracts使った
3.
First Step
4.
Code Contracts .NET4から標準搭載された?
mscorlibにSystem.Diagnostics.Contracts (主に)その中のContractクラスのメソッド群
5.
何か動かないよ? よくあるnullチェックをしてみようと思った
Contract.Requiresは事前条件 引数がnullだったら契約違反という感じにしたい static void Hoge(string arg) { Contract.Requires(arg != null); } が、実行しても無反応 Conditional属性がついているのでコンパル時に 消える(条件付きメソッド、DEBUGとかでお馴染み) 条件はCONTRACTS_FULL(但し自分で足す意味はない)
6.
何か動かないよ? Part2 よくあるnullチェックをしてみようと思った
again Contract.Requires<TException>も事前条件 引数がnullだったら契約違反で例外ぶん投げたい static void Hoge(string arg) { Contract.Requires<ArgumentNullException>(arg != null); } が、変なゕサートが飛ぶ そしてゕプリは強制終了 リラターがmustだと?
7.
つまるところ Code
Contractsの利用にはリラターが必要 最終的な配布物はコンパラオプションで契約用コードを 取り除く。従って実行効率にも影響しない。 http://ja.wikipedia.org/wiki/契約プログラミング 契約は取り除かれなければならない そのためにはラブラリだけでは不可能で、コン パル時にバナリを弄る必要がある 契約の実現のため、現状はバナリ改変している 真に標準搭載されたと言えるのはリラターがコン パラと統合された時かもね
8.
Code Contractsの構成物 必須
Contractクラスなどコードに記述するマーカー .NET 4で現状標準搭載されているのはこれだけ バナリリラター(ccrewrite.exe) オプション 参照ラブラリ生成(ccrefgen.exe) ドキュメント生成(ccdocgen.exe) 静的チェッカー(cccheck.exe) cccheckはPremium Editionのみ 静的チェックなしの場合は、例外orゕサートを投げる実 行時チェックという形になる
9.
Get Ready to
Contracts
10.
Code Contractsのンストール DevLabs:
Code Contracts http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx Standard Edition (Visual Studio Professional) ccrewrite, ccrefgen, ccdocgen Premium Edition (Visual Studio Premium,Ultimate) Standard + cccheck Visual Studio Express Editionでは使えない 静的チェッカーの有無も大きなところ 契約の正しさが実行時じゃないと確認出来ないとい うのは、何が正しいのか分からない初学者にとって 学習が困難になる
11.
プロジェクトのプロパテゖ
Contractsタブが追加されてる に、Code チェックボックスをオンにすると各機能が有効に パラメータがいっぱいあって困る? マニュゕルを見れば勿論、説明がある 日本語で?zeclさんのスラドを見よう! http://d.hatena.ne.jp/zecl/20110213/p2
12.
事前条件 Contract.Requires
無印と<TException>とEndContractBlockの三種 無印はコンパラ生成のContractExceptionを投げる コンパラ生成なので型判別したcatchは不可能 <TE>の場合は指定した例外を投げる EndContractBlockはif-then-throwを<TE>に変換する // これと if (arg == null) throw new ArgumentNullException("arg"); Contract.EndContractBlock(); // これは大体等しい Contract.Requires<ArgumentNullException>(arg != null);
13.
事前条件の違い EndContractBlockはレガシー環境用
バナリリラターがある環境が前提なら不要 Assembly Modeの選択 Requires, Requires<TE>はStandard Contract EndContractBlockを使う場合はCustom Parameter 無印と<TE>ではリラト時に残るレベルが違う 無印の場合はReleaseRequiresでは除去される DebugはFull、ReleaseではPreまたはReleaseを推奨
14.
事後・不変・ンターフェス 事後
: Contract.Ensures 戻り値を表すContract.Result<T>とセットで使うこと が多い 不変 : Contract.Invariant ContractInvariantMethod属性とセットで cimコードスニペットを使えば展開される ンターフェスへの契約 書くのがヘンテコで面倒くさい cintfコードスニペットを使えば展開される
15.
Marriage with IntelliSense
16.
動かしたけど嬉しさ少なめ? 静的チェッカなしだと、どうも地味
Premiumの人なら関係ないですねShit! そんな物足りなさを感じるゕナタにVisualな贈り物 VS拡張:Code Contracts Editor Extensions http://visualstudiogallery.msdn.microsoft.com/85f0aa38 -a8a8-4811-8b86-e7f0b8d8c71b 契約がIntelliSenseに表示される! FreeなのでVS Professionalの人でもOK
17.
おや、標準ラブラリの様子が .NET4からBCLも契約済み
そういう意味では標準搭載と言えなくもない
18.
使い方 標準ラブラリは何もしなくても表示される 自作の契約はReference
Assemblyを作る必要がある Reference Assemblyはクラスラブラリなど、契約 が除去されたリリース用バナリを参照する他の ラブラリが契約情報を参照したい場合に必要 (但し、決してリラト後のバナリに契約を再 度埋め込めれるわけではない)
19.
但し制限も色々あり コンストラクタは表示されません ジェネリックメソッドは表示されません
Enumerable.Rangeは表示されるのにRepeatは表示さ れなかったりしてるのが確認できます つまるところLINQのメソッドは全滅 yieldが含まれると表示されません dynamicが含まれると表示されません よく落ちます(落ちたらVS再起動まで復活しない) Editor Extensionsに関してはアルファ版だと思って 暖かく見守りましょう
20.
Merit and Demerit
21.
嬉しいこと1 引数名を文字列で指定しなくてもいい
リラターが埋め込んでくれるから コードスニペットcrenは文字列指定付きだけど、個 人的にはそれは不要だと思う // この文字列で引数名を書くのがかなりヤだった if (arg == null) throw new ArgumentNullException("arg"); // それをCode Contractsではこう書き、そしてこれは Contract.Requires<ArgumentNullException>(arg != null); // バナリリラト後にこうなる // 最後の"arg != null"がメッセージで、 // 条件を文字列として生成してくれているのが分かる __ContractsRuntime.Requires<ArgumentNullException>( arg != null, null, "arg != null");
22.
嬉しいこと2 ンターフェスに契約すると、それを実装する
ものへは何も書かなくても自動で埋め込まれる // こうしてンターフェスへの契約を作ると(cintfスニペット推奨) [ContractClass(typeof(IHogeContract))] public partial interface IHoge { void Show(string arg); } [ContractClassFor(typeof(IHoge))] abstract class IHogeContract : IHoge { public void Show(string arg) { Contract.Requires<ArgumentNullException>(arg != null); } }
23.
それはとっても嬉しいなって class ClassA :
IHoge { // 何も書いていませんが // Contract.Requires<ArgumentNullException>(arg != null)が埋めこまれる public void Show(string arg) { Console.WriteLine(arg); } } class ClassB : IHoge { // 全てのメソッドにif(arg == null) throwを書く時代さようなら! public void Show(string arg) { Console.WriteLine(arg + arg); } } これにより、積極的なンターフェスの抽出と 契約の記述が促されます(不純動機ドリブン)
24.
嬉しいこと3 静的チェッカーでTester-Doerパターンを安全に // こんなどうでもいいクラスがあるとして public
class ToaruClass { int value; public bool IsReadOnly { get; private set; } public void SetValue(int value) { Contract.Requires(!IsReadOnly); this.value = value; } } var toaru = new ToaruClass(); // IsReadOnlyをチェックしていないのでunproven toaru.SetValue(100); // こう書けばSafe if (!toaru.IsReadOnly) toaru.SetValue(100);
25.
Requiresの基本 Requiresで検証する要素は外部から見えないと、バ
ナリリラターを通りません public class ToaruClass { int value; private bool isReadOnly; public ToaruClass(bool isReadOnly) { this.isReadOnly = isReadOnly; } public void SetValue(int value) { // isReadOnlyが外から不可視なのでダメ Contract.Requires(!isReadOnly); this.value = value; } }
26.
なんでなんで? Requires、事前条件はメソッド呼び出し側が、正し い呼び出しが可能かの責任を負う必要がある、つ
まり外から検証可能でないとならない 逆にEnsures、事後条件が正しく成立するかはメ ソッド側の責任なので、メソッド内部できちんと Ensuresの条件が満たせる必要がある
27.
Requiresの基本 Part2 Requires内で使えるメソッドはPureなもののみ
警告なので実行は出来なくはない // Pureを付けないと警告が! [Pure] public static bool IsNull(string arg) { return arg == null; } public void Hoge(string arg) { Contract.Requires(!IsNull(arg)); } Pure、つまり副作用ナシということ String.IsNullOrEmptyなど当然Pure属性ついてます Pureかどうかは自己申告制だったり(非Pureなもので も付けること自体は可能、勿論それはダメですよ)
28.
嬉しくないこと 静的チェッカーは契約の連鎖で成り立っているの
で、契約されてないラブラリが混じると警告祭 りになって鬱陶しい そういう場合はContract.Assumeで、契約済みを擬 態していくのだけど数が多いと心が折れる、だけ じゃなくコードが汚れて可読性悪化の一方に Typeの一部とかExpressionの一部とか、契約済みの はずの標準ラブラリの中にも上手く動かないの がチラホラ
29.
例えばこんなunproven // これは静的チェッカでunproven行き var func
= typeof(Func<,>); var genFunc = func.MakeGenericType(typeof(int), typeof(int)); // 警告を元に、こうAssumeすればいいんですがなんというかかんというか var func = typeof(Func<,>); Contract.Assume(func.IsGenericTypeDefinition); Contract.Assume(func.GetGenericArguments().Length == 2); var genFunc = func.MakeGenericType(typeof(int), typeof(int));
30.
Unproven Hell // (object
x) => (object)((T)x).name static Func<object, object> CreateGetValue(Type type, string name) { Contract.Requires<ArgumentNullException>(type != null); Contract.Requires<ArgumentNullException>(name != null); // Expression.Unboxに事後条件非nullの契約がないため // Expression.PropertyOrFieldの引数が求めるrequires expr != null の検証に失敗する var x = Expression.Parameter(typeof(object), "x"); var func = Expression.Lambda<Func<object, object>>( Expression.Convert( Expression.PropertyOrField( (type.IsValueType) ? Expression.Unbox(x, type) : Expression.Convert(x, type), name), typeof(object)), x); return func.Compile(); }
31.
どういうこと? Expressionも基本的には契約されているんですが、
Expression.UnboxとかExpression.Assignと か、.NET4で新しく追加されたものはあまり契約さ れてないみたい なので山崎春のunproven祭り Expressionは基本的に引数に突っ込んで式としてツ リー上に組み立てていくものなので、Assumeする のが難しい もしAssumeするなら、全部バラして変数にしてから 組み立てなければならないけど、それはない
32.
そして平穏が訪れる // 面倒くさくて耐え切れない時は静的検証オフ属性をつけてやる [ContractVerification(false)] static Func<object,
object> Create(Type type, string name) { // (中略) } Contract.Ensures(Contract.Result<T>() != null); がど れだけ大事かが身にしみて分かる しかし定型句すぎて面倒くさいのは事実…… cenコードスニペットがあるとはいえ
33.
Conclusion
34.
その他 .NET4標準に入っているContractsラブラリの他に、 幾つか追加の属性が
C:¥Program Files (x86)¥Microsoft¥Contracts¥Languages¥CSharp に ある(.csフゔルぽん置き) 使い方の詳細はマニュゕルに載ってる Microsoft Researchで開発されている自動パラメタ ラズドテストPexに対してContractsが記述されて いると、有効な自動生成パラメータが生成できる ようになる http://research.microsoft.com/en-us/projects/pex/
35.
まとめ メリットを幾つかあげましたが、忘れてはならな
い基本的なことは、「事前・事後・不変」の契約 が出来るということ でも、堅苦しい理屈だけじゃなく、目で見て分か る実用的な便利さを提供してくれるのはいいね! if-then-throwを撲滅してくれるというだけでも十 分嬉しいなって まずはそこからで、徐々に高度にステップゕップ すればいいんじゃないかな Expressで使えないのが痛い&Premium以上でない と静的チェッカーが使えないのが大変痛いので、 将来は何とかして欲しいと切実に願う
Descargar ahora