SlideShare a Scribd company logo
1 of 23
わんくま同盟 名古屋勉強会 #37 1
C# での
リファクタリング
TDD 道場 #25
BluewaterSoft 2015/11/14 biac
わんくま同盟 名古屋勉強会 #37 2
スピーカー紹介: biac as 山本 康彦
• 宇宙世紀以前の生まれ
スプートニク1号より3ヶ月ほど前
• 最初は HONDA
クルマの設計/研究を10年くら
いやってた
• 今は BluewaterSoft
を名乗ってアプリ開発とか技術
解説記事とか
• 「NUnitの全貌」⇒
CodeZine 2012/4
わんくま同盟 名古屋勉強会 #37 3
【CM】 C#で始めるテスト駆動開発入門
• CodeZine 連載再開♪
• #08「ユニバーサル
Windowsアプリのユニット
テスト(前編)」
• #09「ユニバーサル
Windowsアプリのユニット
テスト(後編)」
• #10「状態を持つクラスを
テストファーストする」
わんくま同盟 名古屋勉強会 #37 4
TDD = テスト ファースト + リファクタリング
•テスト ファースト: RED と GREEN の繰り返し
•リファクタリング: GREEN を維持したまま実装を
改善
失敗するはずのユニット テストを1つ書き、
失敗することを確認 (=RED)
ユニット テストに通るだけの実装を追加し、
成功することを確認 (=GREEN)
わんくま同盟 名古屋勉強会 #37 5
TDD 3原則 by Robert C Martin
•ArticleS.UncleBob.TheThreeRulesOfTdd (2005) より。
※ 実質は「テスト ファースト 3原則」
1. 失敗するユニットテストを成功させるためにしか、
プロダクトコードを書いてはならない。
2. 失敗させるためにしか、ユニットテストを書いて
はならない。コンパイルエラーは失敗に数える。
3. ユニットテストを1つだけ成功させる以上に、プロ
ダクトコードを書いてはならない。
わんくま同盟 名古屋勉強会 #37 6
TDD MANTRA
• 『Test-Driven
Development: By
Example』からの引用
• テスト駆動開発において
我々は、
・自動テストが失敗してい
る場合に限り、 新しい
コードを書く
・重複を取り除く
• OneDrive で公開
http://1drv.ms/1uz3Z2P
わんくま同盟 名古屋勉強会 #37 7
今年のテーマ
•TDDの半分はテスト ファースト。
残り半分は…
リファクタリング
(refactoring)
わんくま同盟 名古屋勉強会 #37 8
リファクタリング by Martin Fowler
•「リファクタリングとは、コードの外的な振る舞
いを変更せずに、内部の構造を作りかえること」
http://refactoring.com/
Refactoring is … altering its internal structure
without changing its external behavior.
わんくま同盟 名古屋勉強会 #37 9
リファクタリングを学ぶには?
•「リファクタリング ― 既
存のコードを安全に改善
する ―」
by Martin Fowler
http://amzn.to/1C6rzHL
※ 原書は 1999/6 発行
わんくま同盟 名古屋勉強会 #37 10
「リファクタリング」 は造語
•「リファクタリング」は造語
•考案者は不明。Fowler ではない
(例: 1992年の論文)
The refactorings are defined to be behavior
preserving, (リファクタリングは、振る舞いを
維持するように定義される…)
わんくま同盟 名古屋勉強会 #37 11
リファクタリング本にない
リファクタリング
・リファクタリングを学ぶには、「リファクタリング本」❢
・でも、原著は J2SE 1.2 時代のもの
・今どきの Java では?
・今どきの C# では?
わんくま同盟 名古屋勉強会 #37 12
原著のリファクタリング例
•「コレクションのカプセル化」より(新版p.210)
class Person …
private Set _courses;
public void setCourses(Set arg) {
_courses = arg;
}
class Person …
…
public void initializeCourses(Set arg) {
Assert.isTrue(_coursec.isEmpty());
Iterator iter = arg.Iterator();
while(iter.hasNext()) {
addCourse((Course)iter.next());
}
}
・意図を明確化
・安全性を向上
でも、このへんは
ダサイよね❢
わんくま同盟 名古屋勉強会 #37 13
今どきの Java なら
•新版 p.423 より
class Person …
…
public void initializeCourses(Set arg) {
Assert.isTrue(_course.isEmpty());
Iterator iter = arg.Iterator();
while(iter.hasNext()) {
addCourse((Course)iter.next());
}
}
J2SE 5 で
再リファクタリング
ジェネリクスと for each
class Person …
…
public void
initializeCourses(Set<Course> arg) {
assert _course.isEmpty();
for(Course aCourse : arg) {
addCourse(aCourse));
}
}
わんくま同盟 名古屋勉強会 #37 14
今どきの C# なら
•当然、ジェネリクスと foreach 使え
class Person …
…
public void
InitializeCourses(IEnumerable<Course> arg)
{
Debug.Assert(_course.Count == 0);
foreach(var aCourse in arg)
{
AddCourse(aCourse);
}
}
わんくま同盟 名古屋勉強会 #37 15
今どきの C# の
リファクタリング
今どきの C# でのリファクタリングをいくつか紹介
・ループ
・null チェック
・画面のデータ
・テンプレート パターン
わんくま同盟 名古屋勉強会 #37 16
C# : ループをLINQにリファクタリング
•コレクションに対するループ処理
public bool HasAdvancedCourse
{
get
{
foreach (var c in Courses)
if (c.IsAdvanced)
return true;
return false;
}
}
C# 6で
リファクタリング
LINQ (+ラムダ式)
public bool HasAdvancedCourse
=> Courses.Any(c => c.IsAdvanced);
わんくま同盟 名古屋勉強会 #37 17
C# : ガード節を null propagation 演算子に
•null チェック
(リファクタリング本では null オブジェクトを導入)
public string Foo(SampleClass arg)
{
if(arg == null
|| arg.Bar == null)
return null;
return arg.Bar.Buz();
}
C# 6で
リファクタリング
null propagation 演算子
public string Foo(SampleClass arg)
{
return arg?.Bar?.Buz();
}
わんくま同盟 名古屋勉強会 #37 18
C# : 画面のデータをデータバインディングで分離
• 「観察されるデータの複製」(複製されたデータが画面にある)
⇨ データバインディングでロジック側のデータと同期
(リファクタリング本ではObserverパターンの導入)
• データバインディングは、.NET では汎用的なスキル
Windows Forms / WPF / ストアアプリ / UWP アプリ
わんくま同盟 名古屋勉強会 #37 19
C# : テンプレートパターン ⇨ ラムダ式 (その1)
•似た処理を同じ順序で実行する2つのクラス
(リファクタリング本ではテンプレートパターンを導入)
public class SampleClass
{
// テンプレートメソッド
public int Calc(int x)
{
var work = Foo(x);
work = Bar(work); // ☜ この中身だけがちょっと違う2つの処理
return Buz(work);
}
private SampleClass() {
// 外部からのインスタンス化を禁止
}
わんくま同盟 名古屋勉強会 #37 20
C# : テンプレートパターン ⇨ ラムダ式 (その2)
•問題の本質は、安全にメソッドを差し替えること
// テンプレートメソッド内で使うメソッド定義
int Foo(int x) => x % 7;
Func<int, int> Bar; // 差し替え可能
int Buz(int x) => x + 1;
// Bar メソッドを確定してインスタンスを生成
public static SampleClass CreateInstanceA() {
return new SampleClass() { Bar = (x) => x * 2, };
}
public static SampleClass CreateInstanceB() {
return new SampleClass() { Bar = (x) => x * 3, };
}
}
わんくま同盟 名古屋勉強会 #37 21
まとめ : リファクタリング マスターへの道
•基礎 : 「リファクタリン
グ ― 既存のコードを安全
に改善する ―」
by Martin Fowler
http://amzn.to/1C6rzHL
⇩
•最新の開発環境に合った
リファクタリングの研究
わんくま同盟 名古屋勉強会 #37 22
Visual Studio Community 2015
•無償の Visual Studio
•ライセンス制限アリ (個人利用なら無条件でOK!)
詳細は⇒http://www.microsoft.com/ja-jp/dev/products/community.aspx
•Professionalとほぼ同等
•ダウンロード
https://www.visualstudio.com/products/visual-studio-community-vs
Visual Studio Community は、個人の開発者、オープン ソース プロジェクト、アカデミックな研究、教育、中小企業の専門家チームのための無料のコミュニティです。
わんくま同盟 名古屋勉強会 #37 23
ご清聴ありがとうございました

More Related Content

What's hot

Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発Osamu Monoe
 
Universal Apps (UWP)
Universal Apps (UWP)Universal Apps (UWP)
Universal Apps (UWP)Shin-ya Koga
 
Uwpハンズオン参加レポート
Uwpハンズオン参加レポートUwpハンズオン参加レポート
Uwpハンズオン参加レポートMakoto Nishimura
 
Empower every App and every Developer in a Mobile-first, Cloud-first World.
Empower every App and every Developer in a Mobile-first, Cloud-first World.Empower every App and every Developer in a Mobile-first, Cloud-first World.
Empower every App and every Developer in a Mobile-first, Cloud-first World.Akira Inoue
 
新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ慎一 古賀
 
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターンいまさら学ぶMVVMパターン
いまさら学ぶMVVMパターンYuta Matsumura
 
その後のBash on windows
その後のBash on windowsその後のBash on windows
その後のBash on windowsKazushi Kamegawa
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側Yusuke Naka
 
Pythonで始めるWebアプリケーション開発
Pythonで始めるWebアプリケーション開発Pythonで始めるWebアプリケーション開発
Pythonで始めるWebアプリケーション開発Takahiro Kubo
 
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップJavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ慎一 古賀
 
Pythonを中心としたチーム開発
Pythonを中心としたチーム開発Pythonを中心としたチーム開発
Pythonを中心としたチーム開発Ryo Takahashi
 
あるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクルあるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクルKentaro Iizuka
 
C++からC#まで Visual Studio 縛り (で死ぬ実験)
C++からC#まで Visual Studio 縛り (で死ぬ実験)C++からC#まで Visual Studio 縛り (で死ぬ実験)
C++からC#まで Visual Studio 縛り (で死ぬ実験)Takashi Kawasaki
 
Visual Studio Code #phpcon2015
Visual Studio Code #phpcon2015Visual Studio Code #phpcon2015
Visual Studio Code #phpcon2015Aya Tokura
 
Win32 APIをてなずけよう
Win32 APIをてなずけようWin32 APIをてなずけよう
Win32 APIをてなずけようKouji Matsui
 
.NET の今と今後に思うこと (Tokyo Ver.)
.NET の今と今後に思うこと (Tokyo Ver.).NET の今と今後に思うこと (Tokyo Ver.)
.NET の今と今後に思うこと (Tokyo Ver.)Akira Inoue
 
Introducing Fluent Design
Introducing Fluent DesignIntroducing Fluent Design
Introducing Fluent Designc-mitsuba
 
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?Yasuhiko Yamamoto
 

What's hot (20)

Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
 
Universal Apps (UWP)
Universal Apps (UWP)Universal Apps (UWP)
Universal Apps (UWP)
 
Uwpハンズオン参加レポート
Uwpハンズオン参加レポートUwpハンズオン参加レポート
Uwpハンズオン参加レポート
 
.NET vNext
.NET vNext.NET vNext
.NET vNext
 
Empower every App and every Developer in a Mobile-first, Cloud-first World.
Empower every App and every Developer in a Mobile-first, Cloud-first World.Empower every App and every Developer in a Mobile-first, Cloud-first World.
Empower every App and every Developer in a Mobile-first, Cloud-first World.
 
新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ
 
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターンいまさら学ぶMVVMパターン
いまさら学ぶMVVMパターン
 
その後のBash on windows
その後のBash on windowsその後のBash on windows
その後のBash on windows
 
WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側WebRTC開発者向けプラットフォーム SkyWayの裏側
WebRTC開発者向けプラットフォーム SkyWayの裏側
 
Pythonで始めるWebアプリケーション開発
Pythonで始めるWebアプリケーション開発Pythonで始めるWebアプリケーション開発
Pythonで始めるWebアプリケーション開発
 
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップJavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
JavaScriptを使った開発を始めるなら!TypeScriptをはじめよう ~ ステップアップ
 
Pythonを中心としたチーム開発
Pythonを中心としたチーム開発Pythonを中心としたチーム開発
Pythonを中心としたチーム開発
 
あるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクルあるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクル
 
C++からC#まで Visual Studio 縛り (で死ぬ実験)
C++からC#まで Visual Studio 縛り (で死ぬ実験)C++からC#まで Visual Studio 縛り (で死ぬ実験)
C++からC#まで Visual Studio 縛り (で死ぬ実験)
 
Visual Studio Code #phpcon2015
Visual Studio Code #phpcon2015Visual Studio Code #phpcon2015
Visual Studio Code #phpcon2015
 
Win32 APIをてなずけよう
Win32 APIをてなずけようWin32 APIをてなずけよう
Win32 APIをてなずけよう
 
.NET の今と今後に思うこと (Tokyo Ver.)
.NET の今と今後に思うこと (Tokyo Ver.).NET の今と今後に思うこと (Tokyo Ver.)
.NET の今と今後に思うこと (Tokyo Ver.)
 
Introducing Fluent Design
Introducing Fluent DesignIntroducing Fluent Design
Introducing Fluent Design
 
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
 
Silverlight to Next オンライン セミナー
Silverlight to Next オンライン セミナーSilverlight to Next オンライン セミナー
Silverlight to Next オンライン セミナー
 

Similar to わんくま名古屋 #37 (20151114) TDD道場 #25

Implementation of Counters in ScopedBASIC
Implementation of Counters in ScopedBASICImplementation of Counters in ScopedBASIC
Implementation of Counters in ScopedBASICKazuhiro Hishinuma
 
わんくま名古屋#33(20141115) TDD道場#21
わんくま名古屋#33(20141115) TDD道場#21わんくま名古屋#33(20141115) TDD道場#21
わんくま名古屋#33(20141115) TDD道場#21Yasuhiko Yamamoto
 
KDDI Business ID におけるアジャイル開発と検証フロー
KDDI Business ID におけるアジャイル開発と検証フローKDDI Business ID におけるアジャイル開発と検証フロー
KDDI Business ID におけるアジャイル開発と検証フローques_staff
 
わんくま名古屋 #32 (20140823) TDD道場 #20
わんくま名古屋 #32 (20140823) TDD道場 #20わんくま名古屋 #32 (20140823) TDD道場 #20
わんくま名古屋 #32 (20140823) TDD道場 #20Yasuhiko Yamamoto
 
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1MasuqaT
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#ta2c
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1Y Watanabe
 
Trat sprint6 pdf
Trat sprint6 pdfTrat sprint6 pdf
Trat sprint6 pdftratwakate
 
わんくま名古屋#34(20150214) TDD道場#22
わんくま名古屋#34(20150214) TDD道場#22わんくま名古屋#34(20150214) TDD道場#22
わんくま名古屋#34(20150214) TDD道場#22Yasuhiko Yamamoto
 
「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbc「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbcHiroyuki Ohnaka
 
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回Project Samurai
 
わんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイント
わんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイントわんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイント
わんくま名古屋#25(20121201) TDD道場#13 ~ MetroアプリをテストファーストするときのポイントYasuhiko Yamamoto
 
TDD を自分の道具にしよう
TDD を自分の道具にしようTDD を自分の道具にしよう
TDD を自分の道具にしようYuji Okazawa
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7Takaaki Suzuki
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話Masanori Masui
 

Similar to わんくま名古屋 #37 (20151114) TDD道場 #25 (20)

Implementation of Counters in ScopedBASIC
Implementation of Counters in ScopedBASICImplementation of Counters in ScopedBASIC
Implementation of Counters in ScopedBASIC
 
わんくま名古屋#33(20141115) TDD道場#21
わんくま名古屋#33(20141115) TDD道場#21わんくま名古屋#33(20141115) TDD道場#21
わんくま名古屋#33(20141115) TDD道場#21
 
KDDI Business ID におけるアジャイル開発と検証フロー
KDDI Business ID におけるアジャイル開発と検証フローKDDI Business ID におけるアジャイル開発と検証フロー
KDDI Business ID におけるアジャイル開発と検証フロー
 
わんくま名古屋 #32 (20140823) TDD道場 #20
わんくま名古屋 #32 (20140823) TDD道場 #20わんくま名古屋 #32 (20140823) TDD道場 #20
わんくま名古屋 #32 (20140823) TDD道場 #20
 
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
C#のコード解析ってなんだ@20160825 CenterCLR.学生 #1
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#
 
ゼロから始めるQ#
ゼロから始めるQ#ゼロから始めるQ#
ゼロから始めるQ#
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
 
C# 7 New Features
C# 7 New FeaturesC# 7 New Features
C# 7 New Features
 
Trat sprint6 pdf
Trat sprint6 pdfTrat sprint6 pdf
Trat sprint6 pdf
 
わんくま名古屋#34(20150214) TDD道場#22
わんくま名古屋#34(20150214) TDD道場#22わんくま名古屋#34(20150214) TDD道場#22
わんくま名古屋#34(20150214) TDD道場#22
 
20201127 .NET 5
20201127 .NET 520201127 .NET 5
20201127 .NET 5
 
「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbc「TDDはじめて物語」 #tddbc
「TDDはじめて物語」 #tddbc
 
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回
 
わんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイント
わんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイントわんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイント
わんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイント
 
TDD を自分の道具にしよう
TDD を自分の道具にしようTDD を自分の道具にしよう
TDD を自分の道具にしよう
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
 

More from Yasuhiko Yamamoto

わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしようわんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしようYasuhiko Yamamoto
 
わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門Yasuhiko Yamamoto
 
わんくま名古屋#33(20141115) モノ作り半生
わんくま名古屋#33(20141115) モノ作り半生わんくま名古屋#33(20141115) モノ作り半生
わんくま名古屋#33(20141115) モノ作り半生Yasuhiko Yamamoto
 
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!Yasuhiko Yamamoto
 
わんくま名古屋#31(20140524) TDD道場 #19
わんくま名古屋#31(20140524) TDD道場 #19わんくま名古屋#31(20140524) TDD道場 #19
わんくま名古屋#31(20140524) TDD道場 #19Yasuhiko Yamamoto
 
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧めわんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧めYasuhiko Yamamoto
 
Windows ストア アプリでスレッド間排他処理
Windows ストア アプリでスレッド間排他処理Windows ストア アプリでスレッド間排他処理
Windows ストア アプリでスレッド間排他処理Yasuhiko Yamamoto
 
Windows 8.1 Update 1 の噂をまとめてみた
Windows 8.1 Update 1 の噂をまとめてみたWindows 8.1 Update 1 の噂をまとめてみた
Windows 8.1 Update 1 の噂をまとめてみたYasuhiko Yamamoto
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitYasuhiko Yamamoto
 
わんくま名古屋 #29 (2013/11/23) TDD道場 #17
わんくま名古屋 #29 (2013/11/23) TDD道場 #17わんくま名古屋 #29 (2013/11/23) TDD道場 #17
わんくま名古屋 #29 (2013/11/23) TDD道場 #17Yasuhiko Yamamoto
 
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよ
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよわんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよ
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよYasuhiko Yamamoto
 
Windows 8.1 ストア アプリ first look for 8.0 developers! [ss]
Windows 8.1 ストア アプリ first look for 8.0 developers! [ss]Windows 8.1 ストア アプリ first look for 8.0 developers! [ss]
Windows 8.1 ストア アプリ first look for 8.0 developers! [ss]Yasuhiko Yamamoto
 
Windowsストアアプリでウイルスを作るには!? cod2013名古屋
Windowsストアアプリでウイルスを作るには!? cod2013名古屋Windowsストアアプリでウイルスを作るには!? cod2013名古屋
Windowsストアアプリでウイルスを作るには!? cod2013名古屋Yasuhiko Yamamoto
 
わんくま名古屋#27(20130518) データバインディングを極める
わんくま名古屋#27(20130518) データバインディングを極めるわんくま名古屋#27(20130518) データバインディングを極める
わんくま名古屋#27(20130518) データバインディングを極めるYasuhiko Yamamoto
 
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!Yasuhiko Yamamoto
 
TDDの原理 ~ スペック・ファースト
TDDの原理 ~ スペック・ファーストTDDの原理 ~ スペック・ファースト
TDDの原理 ~ スペック・ファーストYasuhiko Yamamoto
 
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」Yasuhiko Yamamoto
 
わんくま名古屋#25(20121201) LT:「開発体験テンプレートを使ったストアアプリの作成」
わんくま名古屋#25(20121201) LT:「開発体験テンプレートを使ったストアアプリの作成」わんくま名古屋#25(20121201) LT:「開発体験テンプレートを使ったストアアプリの作成」
わんくま名古屋#25(20121201) LT:「開発体験テンプレートを使ったストアアプリの作成」Yasuhiko Yamamoto
 
テンプレートを使ったストアアプリの作成
テンプレートを使ったストアアプリの作成テンプレートを使ったストアアプリの作成
テンプレートを使ったストアアプリの作成Yasuhiko Yamamoto
 
Metroアプリの作り方 (COD2012)
Metroアプリの作り方 (COD2012)Metroアプリの作り方 (COD2012)
Metroアプリの作り方 (COD2012)Yasuhiko Yamamoto
 

More from Yasuhiko Yamamoto (20)

わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしようわんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
 
わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門
 
わんくま名古屋#33(20141115) モノ作り半生
わんくま名古屋#33(20141115) モノ作り半生わんくま名古屋#33(20141115) モノ作り半生
わんくま名古屋#33(20141115) モノ作り半生
 
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
 
わんくま名古屋#31(20140524) TDD道場 #19
わんくま名古屋#31(20140524) TDD道場 #19わんくま名古屋#31(20140524) TDD道場 #19
わんくま名古屋#31(20140524) TDD道場 #19
 
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧めわんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
 
Windows ストア アプリでスレッド間排他処理
Windows ストア アプリでスレッド間排他処理Windows ストア アプリでスレッド間排他処理
Windows ストア アプリでスレッド間排他処理
 
Windows 8.1 Update 1 の噂をまとめてみた
Windows 8.1 Update 1 の噂をまとめてみたWindows 8.1 Update 1 の噂をまとめてみた
Windows 8.1 Update 1 の噂をまとめてみた
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
 
わんくま名古屋 #29 (2013/11/23) TDD道場 #17
わんくま名古屋 #29 (2013/11/23) TDD道場 #17わんくま名古屋 #29 (2013/11/23) TDD道場 #17
わんくま名古屋 #29 (2013/11/23) TDD道場 #17
 
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよ
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよわんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよ
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよ
 
Windows 8.1 ストア アプリ first look for 8.0 developers! [ss]
Windows 8.1 ストア アプリ first look for 8.0 developers! [ss]Windows 8.1 ストア アプリ first look for 8.0 developers! [ss]
Windows 8.1 ストア アプリ first look for 8.0 developers! [ss]
 
Windowsストアアプリでウイルスを作るには!? cod2013名古屋
Windowsストアアプリでウイルスを作るには!? cod2013名古屋Windowsストアアプリでウイルスを作るには!? cod2013名古屋
Windowsストアアプリでウイルスを作るには!? cod2013名古屋
 
わんくま名古屋#27(20130518) データバインディングを極める
わんくま名古屋#27(20130518) データバインディングを極めるわんくま名古屋#27(20130518) データバインディングを極める
わんくま名古屋#27(20130518) データバインディングを極める
 
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
 
TDDの原理 ~ スペック・ファースト
TDDの原理 ~ スペック・ファーストTDDの原理 ~ スペック・ファースト
TDDの原理 ~ スペック・ファースト
 
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
 
わんくま名古屋#25(20121201) LT:「開発体験テンプレートを使ったストアアプリの作成」
わんくま名古屋#25(20121201) LT:「開発体験テンプレートを使ったストアアプリの作成」わんくま名古屋#25(20121201) LT:「開発体験テンプレートを使ったストアアプリの作成」
わんくま名古屋#25(20121201) LT:「開発体験テンプレートを使ったストアアプリの作成」
 
テンプレートを使ったストアアプリの作成
テンプレートを使ったストアアプリの作成テンプレートを使ったストアアプリの作成
テンプレートを使ったストアアプリの作成
 
Metroアプリの作り方 (COD2012)
Metroアプリの作り方 (COD2012)Metroアプリの作り方 (COD2012)
Metroアプリの作り方 (COD2012)
 

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (9)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

わんくま名古屋 #37 (20151114) TDD道場 #25

  • 1. わんくま同盟 名古屋勉強会 #37 1 C# での リファクタリング TDD 道場 #25 BluewaterSoft 2015/11/14 biac
  • 2. わんくま同盟 名古屋勉強会 #37 2 スピーカー紹介: biac as 山本 康彦 • 宇宙世紀以前の生まれ スプートニク1号より3ヶ月ほど前 • 最初は HONDA クルマの設計/研究を10年くら いやってた • 今は BluewaterSoft を名乗ってアプリ開発とか技術 解説記事とか • 「NUnitの全貌」⇒ CodeZine 2012/4
  • 3. わんくま同盟 名古屋勉強会 #37 3 【CM】 C#で始めるテスト駆動開発入門 • CodeZine 連載再開♪ • #08「ユニバーサル Windowsアプリのユニット テスト(前編)」 • #09「ユニバーサル Windowsアプリのユニット テスト(後編)」 • #10「状態を持つクラスを テストファーストする」
  • 4. わんくま同盟 名古屋勉強会 #37 4 TDD = テスト ファースト + リファクタリング •テスト ファースト: RED と GREEN の繰り返し •リファクタリング: GREEN を維持したまま実装を 改善 失敗するはずのユニット テストを1つ書き、 失敗することを確認 (=RED) ユニット テストに通るだけの実装を追加し、 成功することを確認 (=GREEN)
  • 5. わんくま同盟 名古屋勉強会 #37 5 TDD 3原則 by Robert C Martin •ArticleS.UncleBob.TheThreeRulesOfTdd (2005) より。 ※ 実質は「テスト ファースト 3原則」 1. 失敗するユニットテストを成功させるためにしか、 プロダクトコードを書いてはならない。 2. 失敗させるためにしか、ユニットテストを書いて はならない。コンパイルエラーは失敗に数える。 3. ユニットテストを1つだけ成功させる以上に、プロ ダクトコードを書いてはならない。
  • 6. わんくま同盟 名古屋勉強会 #37 6 TDD MANTRA • 『Test-Driven Development: By Example』からの引用 • テスト駆動開発において 我々は、 ・自動テストが失敗してい る場合に限り、 新しい コードを書く ・重複を取り除く • OneDrive で公開 http://1drv.ms/1uz3Z2P
  • 7. わんくま同盟 名古屋勉強会 #37 7 今年のテーマ •TDDの半分はテスト ファースト。 残り半分は… リファクタリング (refactoring)
  • 8. わんくま同盟 名古屋勉強会 #37 8 リファクタリング by Martin Fowler •「リファクタリングとは、コードの外的な振る舞 いを変更せずに、内部の構造を作りかえること」 http://refactoring.com/ Refactoring is … altering its internal structure without changing its external behavior.
  • 9. わんくま同盟 名古屋勉強会 #37 9 リファクタリングを学ぶには? •「リファクタリング ― 既 存のコードを安全に改善 する ―」 by Martin Fowler http://amzn.to/1C6rzHL ※ 原書は 1999/6 発行
  • 10. わんくま同盟 名古屋勉強会 #37 10 「リファクタリング」 は造語 •「リファクタリング」は造語 •考案者は不明。Fowler ではない (例: 1992年の論文) The refactorings are defined to be behavior preserving, (リファクタリングは、振る舞いを 維持するように定義される…)
  • 11. わんくま同盟 名古屋勉強会 #37 11 リファクタリング本にない リファクタリング ・リファクタリングを学ぶには、「リファクタリング本」❢ ・でも、原著は J2SE 1.2 時代のもの ・今どきの Java では? ・今どきの C# では?
  • 12. わんくま同盟 名古屋勉強会 #37 12 原著のリファクタリング例 •「コレクションのカプセル化」より(新版p.210) class Person … private Set _courses; public void setCourses(Set arg) { _courses = arg; } class Person … … public void initializeCourses(Set arg) { Assert.isTrue(_coursec.isEmpty()); Iterator iter = arg.Iterator(); while(iter.hasNext()) { addCourse((Course)iter.next()); } } ・意図を明確化 ・安全性を向上 でも、このへんは ダサイよね❢
  • 13. わんくま同盟 名古屋勉強会 #37 13 今どきの Java なら •新版 p.423 より class Person … … public void initializeCourses(Set arg) { Assert.isTrue(_course.isEmpty()); Iterator iter = arg.Iterator(); while(iter.hasNext()) { addCourse((Course)iter.next()); } } J2SE 5 で 再リファクタリング ジェネリクスと for each class Person … … public void initializeCourses(Set<Course> arg) { assert _course.isEmpty(); for(Course aCourse : arg) { addCourse(aCourse)); } }
  • 14. わんくま同盟 名古屋勉強会 #37 14 今どきの C# なら •当然、ジェネリクスと foreach 使え class Person … … public void InitializeCourses(IEnumerable<Course> arg) { Debug.Assert(_course.Count == 0); foreach(var aCourse in arg) { AddCourse(aCourse); } }
  • 15. わんくま同盟 名古屋勉強会 #37 15 今どきの C# の リファクタリング 今どきの C# でのリファクタリングをいくつか紹介 ・ループ ・null チェック ・画面のデータ ・テンプレート パターン
  • 16. わんくま同盟 名古屋勉強会 #37 16 C# : ループをLINQにリファクタリング •コレクションに対するループ処理 public bool HasAdvancedCourse { get { foreach (var c in Courses) if (c.IsAdvanced) return true; return false; } } C# 6で リファクタリング LINQ (+ラムダ式) public bool HasAdvancedCourse => Courses.Any(c => c.IsAdvanced);
  • 17. わんくま同盟 名古屋勉強会 #37 17 C# : ガード節を null propagation 演算子に •null チェック (リファクタリング本では null オブジェクトを導入) public string Foo(SampleClass arg) { if(arg == null || arg.Bar == null) return null; return arg.Bar.Buz(); } C# 6で リファクタリング null propagation 演算子 public string Foo(SampleClass arg) { return arg?.Bar?.Buz(); }
  • 18. わんくま同盟 名古屋勉強会 #37 18 C# : 画面のデータをデータバインディングで分離 • 「観察されるデータの複製」(複製されたデータが画面にある) ⇨ データバインディングでロジック側のデータと同期 (リファクタリング本ではObserverパターンの導入) • データバインディングは、.NET では汎用的なスキル Windows Forms / WPF / ストアアプリ / UWP アプリ
  • 19. わんくま同盟 名古屋勉強会 #37 19 C# : テンプレートパターン ⇨ ラムダ式 (その1) •似た処理を同じ順序で実行する2つのクラス (リファクタリング本ではテンプレートパターンを導入) public class SampleClass { // テンプレートメソッド public int Calc(int x) { var work = Foo(x); work = Bar(work); // ☜ この中身だけがちょっと違う2つの処理 return Buz(work); } private SampleClass() { // 外部からのインスタンス化を禁止 }
  • 20. わんくま同盟 名古屋勉強会 #37 20 C# : テンプレートパターン ⇨ ラムダ式 (その2) •問題の本質は、安全にメソッドを差し替えること // テンプレートメソッド内で使うメソッド定義 int Foo(int x) => x % 7; Func<int, int> Bar; // 差し替え可能 int Buz(int x) => x + 1; // Bar メソッドを確定してインスタンスを生成 public static SampleClass CreateInstanceA() { return new SampleClass() { Bar = (x) => x * 2, }; } public static SampleClass CreateInstanceB() { return new SampleClass() { Bar = (x) => x * 3, }; } }
  • 21. わんくま同盟 名古屋勉強会 #37 21 まとめ : リファクタリング マスターへの道 •基礎 : 「リファクタリン グ ― 既存のコードを安全 に改善する ―」 by Martin Fowler http://amzn.to/1C6rzHL ⇩ •最新の開発環境に合った リファクタリングの研究
  • 22. わんくま同盟 名古屋勉強会 #37 22 Visual Studio Community 2015 •無償の Visual Studio •ライセンス制限アリ (個人利用なら無条件でOK!) 詳細は⇒http://www.microsoft.com/ja-jp/dev/products/community.aspx •Professionalとほぼ同等 •ダウンロード https://www.visualstudio.com/products/visual-studio-community-vs Visual Studio Community は、個人の開発者、オープン ソース プロジェクト、アカデミックな研究、教育、中小企業の専門家チームのための無料のコミュニティです。
  • 23. わんくま同盟 名古屋勉強会 #37 23 ご清聴ありがとうございました