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

C# MVP に聞くC#アレコレ! 小島の分