Merrion Square

merrionsq.exblog.jp ブログトップ

C#: 「delegate」と「Lambda Expressions」を使って無駄を減らす

ほとんど同じだけど、微妙に違うところがあるので、似たMethodを複数書かないといけないとします。

例えば、「Common Action 1」と「Common Action 2」は常にプリントアウトされなければならない。
しかし「Method1」では「Unique Action 1」を、「Method2」では「Unique Action 2」を2つの「Common Action」の前にそれぞれプリントアウトしなければならない。
従って2つの似たMethodを書いてしまったとします。

static void Main(string[] args)
{
Method1();
Method2();
}

static void Method1()
{
Console.WriteLine("Unique Action 1");
Console.WriteLine("Common Action 1");
Console.WriteLine("Common Action 2");
}

static void Method2()
{
Console.WriteLine("Unique Action 2");
Console.WriteLine("Common Action 1");
Console.WriteLine("Common Action 2");
}


でも、これでは同じコードを何回も書くのも面倒だし、なによりメンテナンスが大変です。

例えば「Common Action 1」と「Common Action 2」の間に「Common Action 1.5」をプリントアウトしなくてはならなくなったとすると、2箇所の修正が必要になります。
修正がそれぐらい単純で、2つのMethodだけしかないとかならまだしも、似たMethodがもっと多かったり、共通部分の変更箇所がさらに多く複雑になったりすると、考えただけでぞっとします。

そこで、

delegate」と「Lambda Expressions (C# 3.0+)」を使って、共通部分のためのMethodを1つだけ作り、「Unique Action X」の部分ををパラメター化することで、コードを簡単化します。

public delegate void Action();

static void Main(string[] args)
{
Method(() => Console.WriteLine("Unique Action 1"));
Method(() => Console.WriteLine("Unique Action 2"));
}

static void Method(Action action)
{

action();
Console.WriteLine("Common Action 1");
Console.WriteLine("Common Action 2");
}

ちなみに、「()=>」(Lambda Expressions)の「=>」の後は、「{}」を使うことで、コードブロックも入れることが可能です(その際、各行は「;」で終わらせる必要があります)。

Method(() =>
{
Console.WriteLine("Unique Action 1");
Console.WriteLine("Unique Action 2");
}
);
[PR]
by p_n_t | 2010-06-20 07:51 | プログラミング
line

アイルランドのダブリンで、日々の生活で思いついたことを書いたり、アイルランド国内や旅先(主にヨーロッパ)で撮った写真を掲載したりしています。


by p_n_t
line
クリエイティビティを刺激するポータル homepage.excite
カレンダー
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31