c# mvp に聞くc#アレコレ! 小島の分
DESCRIPTION
Community Open Day 2013 北陸会場 (2013-05-11) 「C# MVP に聞くC#アレコレ!」セッションでの小島の「C#の好きなところ」プレゼンの資料 http://cod.ms/Pages/place_hokuriku.aspx http://atnd.org/events/37799TRANSCRIPT
C# MVP に聞く C# アレコレ !
小島 富治雄
Community Open Day 2013 北陸会場2013-05-11
1
• 小島 富治雄• @Fujiwo• 福井コンピュータアーキテクト株式会社• Microsoft MVP C# (2005-2013)
2
自己紹介
• 今日誕生日です。• 7 才の娘が「パパの誕生日にはカレーを
作ってあげるね」と言ってました。• ところで、私の手荷物にはまだ若干の余
裕があります。
3
大切なことから
「 Windows8[ 業務アプリ ] 開発読本」
4
大切なことから
C# で「 Windows ストア業務アプリ開発入門」
5
私と C# の出会い
• Anders Hejlsberg– 1983 年 Turbo Pascal– (1995 年 Delphi)– 2000 年 C#
6
C# との出会い
2000 年に C#/.NET サイトを準備
7
• Anders Hejlsberg– 1983 年 Turbo Pascal– (1995 年 Delphi)– 2000 年 C#
• 2006 年 2 月 2 日 横浜
8
Anders Hejlsberg との出会い
9
C# の良いところ
• C# というのはよく分からないので、ネットで調べてみた。
10
C# の良いところ
11
C# についての噂
遠隔操作ウイルスを作成したソフト「 Visual Studio 2010 」で使用される
「 C# 」というプログラム言語は比較的新しく、年齢層としては 20 代前後が推測される
シマンテック浜田譲治主任研究員
汎用性の高い『C言語』と比べると、ごく簡単な言語。長年、プログラミングをしている人は
あまり使わないはずだ
12
Twitter で訊いてみた
13
Twitter で訊いてみた
• マルチ パラダイム言語–様々なパラダイムを徐々に学べる
14
C# の好きなところ
delegate
C# 1.X C# 2.0 C# 3.0 C# 4.0 C# 5.0
class
手続き型 関数型
ラムダ式
LINQ
型推論
ジェネリック
拡張メソッド
動的型付け
dynamic
非同期
async/await
オブジェクト指向
Parallel
• 意図していないループや条件分岐なんて書きたくないよね– 例 . 「 10 以下の自然数の偶数をそれぞれ表示する」
15
C# の好きなところ
for (int number = 0; number <= 10; number++) { if (IsEven(number)) Console.WriteLine(number); }NaturalNumbers(max:10)
.Where(IsEven)
.ForEach(Console.WriteLine);
ノイズ(= 意図と関係のないも
の )
だらけ
• C# 1.X の仕様を引きずっている– IEnumerable と IEnumerable<T> など
16
C# の好きでないところ
class Foo : IEnumerable<int> { public IEnumerator<int> GetEnumerator() { … }
IEnumerator IEnumerable.GetEnumerator() { … } }
• var square = a => a * a;× 型が判らない
• var square = (int n) => n * n;× delegate か Expression か判らない
• static T Square<T>(T n) { return n * n; }× 型 T について二項演算子 * に関する制約が付けられない
• Func<dynamic, dynamic> square = n => n * n;○ でも「コレジャナイ」感が
17
C# の好きでないところ
こう書きたい
• Tupple–例えば、
18
C# の好きでないところ
static void Swap<T>(ref T lhs, ref T rhs) {
T temp; temp = lhs; lhs = rhs; rhs = temp;
}
しょうがないけど嫌
Swap の本質じゃないコードは書きたくない
19
C# の好きでないところ
Func<Tuple<int, int>, Tuple<int, int>> swap = pair => new Tuple<int, int>(pair.Item2, pair.Item1); var result = swap(new Tuple<int, int>(1, 2)); var a = result.Item1; var b = result.Item2;
悪いけど、ちょっと有り得ない
var swap = |x, y| => |y, x|;var |a, b| = swap(|1, 2|); こんな感じで書きたい
( 我々の Swap の認識はこの位シンプルな筈 )
• マルチパラダイム言語–ちょうど良い
• シンプルな記述–ちょうど良い
• 多用途–各種デバイス、サーバーサイド
• ツールのサポート–Visual Studio
20
結局 C#
21