「c# 大好き mvp による、c# ドキドキ・ライブコーディング!!」小島の分
TRANSCRIPT
![Page 1: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/1.jpg)
「 C# 大好き MVP による、 C# ドキドキ・ライブコーディング !! 」
小島の分
小島 富治雄2016-02-20
Hokuriku ComCamp 2016 powered by MVPs
![Page 2: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/2.jpg)
自己紹介
• 小島 富治雄• @Fujiwo• http://blog.shos.info• 福井コンピュータアーキテクト株式会社• Microsoft MVP (2005-2016)
![Page 3: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/3.jpg)
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# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/4.jpg)
石野さんからの今回の 無理難題 お題
ちょっと何言ってるか分からない。
「ライブ コーディング 30 分で
伝説の落ちゲーを」
「 WinForms で。だいじょうぶですよね。MVP だから」
![Page 5: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/5.jpg)
今回のお題 : 「 WinForms で伝説の落ちゲー」
これは インチキ 工夫 をするしかない
![Page 6: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/6.jpg)
戦略
• モデル部分を用意しておく• で、「 3 分クッキング方式」と言い張
る
• ビュー (UI) 部分をライブで作る
![Page 7: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/7.jpg)
先ずはモデリング
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# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/8.jpg)
モデリング
• THE MATRIX の NEO (The One) にはこう見える筈
![Page 9: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/9.jpg)
でも、二次元配列は複雑
• 戦略 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# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/10.jpg)
でも、二次元配列は複雑
• 戦略 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# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/11.jpg)
モデル
![Page 12: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/12.jpg)
モデルがしっかり書けていれば…
• View と ViewModel を追加してWPF 版が作れる筈
![Page 13: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/13.jpg)
取り敢えず WPF 版 を作成
![Page 14: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/14.jpg)
WPF 版
• 動いた
![Page 15: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/15.jpg)
モデルがしっかり書けていれば…
• モデルをそのまま使って…• WindowsForms 版が作れる筈• コンソール アプリも簡単にできる筈
![Page 16: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/16.jpg)
モデルがしっかり書けていれば…
• TypeScript にも簡単に移植できるはず• でも今回のお題は WinForms だし ...• まあ、とりあえず移植してみた
![Page 17: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/17.jpg)
TypeScript 版
• Three.js (JavaScript WebGL ライブラリ )+ TypeScript
![Page 18: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/18.jpg)
TypeScript 版
• 動いたので、なんとなく Web にアップ• http://www2.shos.info/FTetris.TS/
• 悪魔の囁き「メイン フォームに WebBrowser コントロール貼って、この URL 渡せば、それって WinForms アプリじゃね ? 」• 怒られるけど
![Page 19: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/19.jpg)
今回の方針
• 三本立て ( なので怒らないでほしい )• 「 3 分クッキング方式」で WinForms
アプリを作る• コンソール アプリも作る• 最悪、 WinForms に WebBrowser 貼
るだけ
![Page 20: 「C# 大好き MVP による、C# ドキドキ・ライブコーディング!!」小島の分](https://reader035.vdocuments.site/reader035/viewer/2022081419/586f729d1a28ab10258b548d/html5/thumbnails/20.jpg)
ソースコードは公開
• https://github.com/Fujiwo/https-github.com-Fujiwo-FTetris