平々毎々 (Hey hey, My my)

rock and roll can never die.

月別アーカイブ: 9月 2005

ばあちゃんが書いた書

青蛙が
竹の葉にいる
燕の子が嘴を
巣におさめる
貧しい夕餉の
卓ではあるが
新しいエプロンが
揃えてある
山査子の
花の蔭には
新月をねらう
猫の目が
ある

広告

ロリポブログに移行

今まではWordPressを設置していました。しかし、テンプレートを変えてみたりCSSを使ってレイアウトしてみたりすることがだんだん面倒になってきたので、ブログエンジンはアウトソースすることにしました。

いや、かなり変わるもんですね、気分が。
ブログ自身の見た目もそうなんですが、管理機能のUIが変わったのが大きいです。

.NET関連メモ

子猫たち

最近、近所に子猫を多く見かける。
子猫2匹

Visual Studio 2005 RC1

PDC中に出ました。
サブスクライバダウンロードでScriptエラーが発生してうまくダウンロードできなかったけれど、「個人用コンテンツ」を編集して、表示項目を減らしたらなぜかエラーが起こらなくなった。

LINQの裏にあるラムダ式

(どっとねっとふぁんBlog経由)

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);

こうですか?わかりません!

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;
}
);
}
}
}

餃子2

今日は麺棒があるので薄くできた。
でも薄すぎた。もっと厚いほうが好み。
具は豚ひき肉とエビの2種類。
餃子