「c# 大好き mvp による、c# ドキドキ・ライブコーディング!!」小島の分

20
C# 大大大 MVP 大大大C# 大大大大 大大大大大大大大 !! 大大大大 大大 大大大 2016-02-20 Hokuriku ComCamp 2016 powered by MVPs

Upload: fujio-kojima

Post on 06-Jan-2017

7.569 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

「 C# 大好き MVP による、 C# ドキドキ・ライブコーディング !! 」

小島の分

小島 富治雄2016-02-20

Hokuriku ComCamp 2016 powered by MVPs

Page 2: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

自己紹介

• 小島 富治雄• @Fujiwo• http://blog.shos.info• 福井コンピュータアーキテクト株式会社• Microsoft MVP (2005-2016)

Page 3: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

C# の好きなところ

• 心地よい進化

C# 1.0 C# 2.0 C# 3.0 C# 4.0 C# 5.0 C# 6.0

オブジェクト指向

ジェネリック

関数型

dynamic

非同期

Roslyn

Page 4: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

石野さんからの今回の 無理難題 お題

ちょっと何言ってるか分からない。

「ライブ コーディング 30 分で

伝説の落ちゲーを」

「 WinForms で。だいじょうぶですよね。MVP だから」

Page 5: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

今回のお題 : 「 WinForms で伝説の落ちゲー」

これは インチキ 工夫 をするしかない

Page 6: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

戦略

• モデル部分を用意しておく• で、「 3 分クッキング方式」と言い張

• ビュー (UI) 部分をライブで作る

Page 7: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

先ずはモデリング

0 0 0 0 0 00 0 0 00 0 0 0 0 00 0 0 03 0 0 0 0 00 0 0 33 3 0 0 0 00 0 0 00 0 0 0 0 01 0 0 00 0 0 0 0 01 0 0 00 0 0 0 6 01 5 0 00 0 0 6 6 61 5 5 5

見えているものを、どうシンプルに捉えるか

Page 8: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

モデリング

• THE MATRIX の NEO (The One) にはこう見える筈

Page 9: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

でも、二次元配列は複雑

• 戦略 1.• SelectMany をやって、一次元 (IEnumerable<T>)

に変換すればいいじゃん→ Linq が使える

public static IEnumerable<T> ToSequence<T>(this T[,] @this){ return @this.AllPoints().Select(point => @this.Get(point)); }

public static IEnumerable<Point<int>> AllPoints<T>(this T[,] @this){ return from x in Enumerable.Range(0, @this.GetLength(0)) from y in Enumerable.Range(0, @this.GetLength(1)) select new Point<int> { X = x, Y = y };}

Page 10: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

でも、二次元配列は複雑

• 戦略 2.• 二次元配列用の ForEach 等を作ればい

いじゃん

public static void ForEach<T>(this T[,] @this, Action<Point<int>, T> action){ @this.AllPoints() .ForEach(point => action(point, @this.Get(point)));}

Page 11: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

モデル

Page 12: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

モデルがしっかり書けていれば…

• View と ViewModel を追加してWPF 版が作れる筈

Page 13: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

取り敢えず WPF 版 を作成

Page 14: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

WPF 版

• 動いた

Page 15: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

モデルがしっかり書けていれば…

• モデルをそのまま使って…• WindowsForms 版が作れる筈• コンソール アプリも簡単にできる筈

Page 16: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

モデルがしっかり書けていれば…

• TypeScript にも簡単に移植できるはず• でも今回のお題は WinForms だし ...• まあ、とりあえず移植してみた

Page 17: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

TypeScript 版

• Three.js (JavaScript WebGL ライブラリ )+ TypeScript

Page 18: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

TypeScript 版

• 動いたので、なんとなく Web にアップ• http://www2.shos.info/FTetris.TS/

• 悪魔の囁き「メイン フォームに WebBrowser コントロール貼って、この URL 渡せば、それって WinForms アプリじゃね ? 」• 怒られるけど

Page 19: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

今回の方針

• 三本立て ( なので怒らないでほしい )• 「 3 分クッキング方式」で WinForms

アプリを作る• コンソール アプリも作る• 最悪、 WinForms に WebBrowser 貼

るだけ

Page 20: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分

ソースコードは公開

• https://github.com/Fujiwo/https-github.com-Fujiwo-FTetris