Visual Studio 2008のインストールが完了しているので、ちょっと仕事を中断して慣らし運転。
インテリセンスがあっても2回書きたくないクラス名 §
「インテリセンスがあっても2回書きたくないクラス名」の変数をvarで宣言してみる。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Program
{
static void Main(string[] args)
{
var a = new List<List<List<List<string>>>>();
Console.WriteLine(a.ToString());
}
}
コレクションからコレクションを作るメソッド §
データの塊からデータの塊を作る一種の集合演算ですね。
2007/12/25追記 ConvertAllメソッドは.NET Framework 2.0からあるメソッドで、全く新しくありません。うっかり見落としてました! なのでこの項目は見ないでください。
C# 2.0を使い込んで気付いた「本来あるべき正当な進化形」であれば備えているはずの機能です。string型からint型へ変換させてみます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Program
{
static void Main(string[] args)
{
var a = new List<string>();
a.Add("Hello");
a.Add("World!");
var b = a.ConvertAll<int>(delegate(string s)
{
return s.Length;
});
Console.WriteLine(b[0]);
Console.WriteLine(b[1]);
}
}
コレクションの最大値 §
ループしないで最大値が得られるわけですね。
しかも最大値の根拠はその場で匿名メソッドで与えられます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Program
{
static void Main(string[] args)
{
var a = new List<string>();
a.Add("もんた");
a.Add("まーっくす!");
var b = a.Max(delegate(string x)
{
return x.Length;
});
Console.WriteLine(b);
}
}
ラムダ式も使おう §
もう、めんどくさい匿名メソッドの書式とはバイバイね。
上のソースをラムダ式に書き換え!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Program
{
static void Main(string[] args)
{
var a = new List<string>();
a.Add("もんた");
a.Add("まーっくす!");
var b = a.Max(x => x.Length);
Console.WriteLine(b);
}
}
LINQも軽く走らせてみよう §
SQLのようなキーワードを使うので心理的抵抗感が高いが、仕掛けとしては悪くないLINQも軽く走らせてみよう。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Program
{
static void Main(string[] args)
{
var a = new List<string>();
a.Add("ぺるっこらぶりん。くるくるLinqる");
a.Add("ぷぷるおふ");
a.Add("てくまくまやこん");
var numQuery =
from n in a
where n.Contains("Linq")
select n;
foreach( string s in numQuery ) Console.WriteLine(s);
}
}
きりがないので、今日はここまで!
もうちょっと目先の用事が片付いたら、C# 3.0で本格的にコードを書き始めましょう。
感想 §
最初、なんじゃこりゃ~と思ったC# 3.0ですが。
いろいろ面倒な処理をずっと簡潔に書けるのは素直に長所です。こうして慣らし運転として小さなサンプルソースを書いてみても、var, ラムダ式, LINQ等が持つ、読み書きする文字数の低減効果は素晴らしいですね。
やはり、書くときも読むときも、文字は少ない方が楽です。(その意見に賛成できない勤勉な奴は、同族ではない)
しかも、型の厳密さは失われていません。変数は全部Variant型扱い……といった乱暴な方法で文字数を減らしている訳ではありません。
ただ、ここまで来るともう、C#を「C風の構文を持った言語」と見なすことはできませんね。おそらく、Cの知識だけでソースを見て何となくムードを掴むことすら不可能な領域に突入してしまったと思います。