青蛙が
竹の葉にいる
燕の子が嘴を
巣におさめる
貧しい夕餉の
卓ではあるが
新しいエプロンが
揃えてある
山査子の
花の蔭には
新月をねらう
猫の目が
ある
2005年9月24日土曜日
2005年9月19日月曜日
2005年9月17日土曜日
2005年9月15日木曜日
Visual Studio 2005 RC1
PDC中に出ました。
サブスクライバダウンロードでScriptエラーが発生してうまくダウンロードできなかったけれど、「個人用コンテンツ」を編集して、表示項目を減らしたらなぜかエラーが起こらなくなった。
2005年9月14日水曜日
LINQの裏にあるラムダ式
(どっとねっとふぁんBlog経由)
PDCでLINQことLanguage Integrated Queryのアナウンスとデモがあったそうだ。
http://msdn.microsoft.com/netframework/future/linq/default.aspx
ちょっとサンプルを見てみよう。サンプルは http://msdn.microsoft.com/vcsharp/future/linqsamples/ にある。
実行結果は
なんだこれ、コード中にSQLみたいのが。
気を落ち着けて、overview (http://download.microsoft.com/download/c/f/b/cfbbc093-f3b3-4fdb-a170-604db2e29e99/linq%20project%20overview.doc) を読む。
上記コードだとvariant型みたいなのが使われていて良くわからないが(追記:型推論。C# 3.0の機能らしい。)、型を明確に書き直すとこうなるらしい。
しかも、上の書き方はシンタックスシュガーらしく、下の書き方と等価らしい。
さらに、下のように分けて書くこともできる。
で、これをC#2.0風に書くとこうなる。
ようするにクロージャで実現されているということ。
LINQとは視点がずれるけど、C# 3.0だとコレクションクロージャメソッドも書き方が変わるな。
こうですか?わかりません!
PDCでLINQことLanguage Integrated Queryのアナウンスとデモがあったそうだ。
http://msdn.microsoft.com/netframework/future/linq/default.aspx
ちょっとサンプルを見てみよう。サンプルは http://msdn.microsoft.com/vcsharp/future/linqsamples/ にある。
public void Linq1() {
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var lowNums =
from n in numbers
where n < 5
select n;
Console.WriteLine("Numbers < 5:");
foreach (var x in lowNums) {
Console.WriteLine(x);
}
}
実行結果は
Numbers < 5:
4
1
3
2
0
なんだこれ、コード中にSQLみたいのが。
気を落ち着けて、overview (http://download.microsoft.com/download/c/f/b/cfbbc093-f3b3-4fdb-a170-604db2e29e99/linq%20project%20overview.doc) を読む。
上記コードだとvariant型みたいなのが使われていて良くわからないが(追記:型推論。C# 3.0の機能らしい。)、型を明確に書き直すとこうなるらしい。
IEnumerable<int> lowNums =
from n in numbers
where n < 5
select n;
しかも、上の書き方はシンタックスシュガーらしく、下の書き方と等価らしい。
IEnumerable<int> lowNums = numbers
.Where(n => n < 5)
.Select(n => n);
さらに、下のように分けて書くこともできる。
Func<int, bool> filter = n => n < 5;
Func<int, int> project = n => n;
IEnumerable<int> lowNums = numbers
.Where(filter)
.Select(project);
で、これをC#2.0風に書くとこうなる。
Func<int, bool> filter = delegate (int n)
{
return (n < 5);
};
Func<int, int> project = delegate (int n)
{
return n;
};
IEnumerable<int> lowNums = numbers
.Where(filter)
.Select(project);
ようするにクロージャで実現されているということ。
LINQとは視点がずれるけど、C# 3.0だとコレクションクロージャメソッドも書き方が変わるな。
//rubyだと managers = employees.select {|e| e.manager?}
managers = employees.FindAll(e => e.IsManager);
こうですか?わかりません!
2005年9月5日月曜日
C# 2.0のコレクションクロージャメソッド
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?CollectionClosureMethod
改めて書いてみると、なんかすごいムズムズする……
改めて書いてみると、なんかすごいムズムズする……
using System;
using System.Collections.Generic;
using System.Text;
namespace Closure
{
class Employee
{
public bool IsManager
{
get {return true;}
}
public void doSomething()
{
}
public Office office
{
get { return new Office(); }
}
}
class Office
{
}
class Business
{
public List<Employee> managers(List<Employee> emps)
{
return emps.FindAll(
delegate(Employee e)
{
return e.IsManager;
}
);
}
public void Do(List<Employee> emps)
{
emps.ForEach(
delegate(Employee e)
{
e.doSomething();
}
);
}
public List<Office> collect(List<Employee> emps)
{
return emps.ConvertAll<Office>(
delegate(Employee e)
{
return e.office;
}
);
}
public bool allManagers(List<Employee> emps)
{
return emps.TrueForAll(
delegate(Employee e)
{
return e.IsManager;
}
);
}
public bool noManagers(List<Employee> emps)
{
return !emps.Exists(
delegate(Employee e)
{
return e.IsManager;
}
);
}
}
}
登録:
投稿 (Atom)