C# 3.0とかVB 9.0とかって?いまさらメモ。
@IT :動的プログラミング言語へと発展するC# 3.0とVB 9.0
記事としては2005/10/13なのでずいぶん昔のものですが、そのとき私は目の前にあるバージョンに手一杯(今もか。orz)だったわけで、現状もとりあえずこの記事しか見ていないという状況ですが、記事をまとめながらはげしくおびえてみるテストです。
●暗黙の型指定
実際に書くとこうなる感じ。
[Visual Basic 9.0]Dim i = 42 ' iは勝手にInteger型
Dim s = "Hoge" ' sは勝手にString型
Option Strict Off(Visual Basic)じゃないですよ〜。暗黙に型を指定できるようになったわけで、自明のことをわざわざ明示する必要はなくなるそうな。この辺が動的・・・?っていうか、自明のことって・・・まぁ、そうなんですけど、コーディングの手間をなくしただけでリーディングの手間は?
[C# 3.0]var i = 42; // iは勝手にint型
var s = "Hoge"; // sは勝手にstring型
・型推論
[Visual Basic 9.0]Dim data() As Integer = {11, 3, 5, 13, 7, 17}
For Each d In data ' dはInteger型だろう
Console.WriteLine(d.GetType().Name)
Next
コンパイラが推論立ててくれるからプログラマは書かなくてもよいですよ、ってことですね。
[C# 3.0]using System;
int[] data = { 11, 3, 5, 13, 7, 17 };
foreach (var a in data)
Console.WriteLine(a.GetType().Name);
・ラムダ式
C# 2.0では匿名メソッドで以下のように書ける。
これがラムダ式になるとこう。
[C# 2.0]int[] data = { 11, 3, 5, 13, 7, 17 };
Array.Sort<int>(data, delegate(int x, int y) { return x - y; });
現状、Visual Basic 9.0での実装は公開されていない(検討中な様子)だそうです。
[C# 3.0]int[] data = { 11, 3, 5, 13, 7, 17 };
Array.Sort<int>(data, (x, y) => x - y);
といった形で書くそうな。これ・・・キツイなぁ。読みにくぅい(私だけでしょうか?)。Visual Basicではもう少し助長な感じでお願いしたい。
引数 => 式
●Extension Methodsの導入
定義されている型のオブジェクトにメソッドを追加できる(ように見える)機能だそうです。
ん〜ほぼリンク先そのまんま引用ですが・・・。あとのせサクサクですか?乱用禁止だなぁ・・・。きっと読めなくなるし。
[C# 3.0]using System;
static class ExtensionMethodClass {
internal static string ToXML(this Person source) {
return string.Format("<Person><Name>{0}</Name><Age>{1}</Age></Person>", source.Name, source.Age);
}
}
class Person {
internal string Name;
internal int Age;}
static class App {
static void Main() {
Person p = new Person();
p.Name = "とりこびと";
p.Age = 27;
Console.WriteLine(p.ToXML());
}
}
●クエリの統合「LINQ」
クエリっぽくかけるんです。WhereとかSelectとか。
うむ・・・ついていけないな。orz
[C# 3.0]Array.Sort<int>(data, (x, y) => x - y);
IEnumerable<int> result = data.Where<int>(delegate(int x){ return x > 7; }).Select<int, int>(delegate(int x){ return x; });
foreach (int a in result)
Console.WriteLine(a);
さらにこれが、
なんぢゃぁ〜これわ!Visual Basicで書くとこうなるらしい。
[C# 3.0]foreach (var a in from x in data where x > 7 select x)
Console.WriteLine(a);
・・・まだいける・・・かも・・・。
[Visual Basic 9.0]For Each a In Select x From x In data Where x > 7
Console.WriteLine(a)
Next