CH3COOH(酢酸)のさくっと393

VB.NET(VS2003)でお仕事中.Windows Mobile大好きです。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  413  : 記事  0  : コメント  7803  : トラックバック  93

ニュース

CH3COOH(酢酸)の実験室 or SOFTBUILD

書庫

日記カテゴリ

ラムダ式は名前からして、難しそうなイメージがあって敬遠してました。

食わず嫌いは駄目ポと、(仕事が暇暇なので)思い至ったので、
delegateをろくに使ったこと無い僕が、ラムダ式に挑戦してみた。

まずは、delegateとラムダ式を使ったC#のコードを書いてみました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    delegate int AddDelegate(int x, int y);

    class Program
    {
        static int hoge(int x, int y)
        {
            return x + y;
        }

        static void add(int x, int y, AddDelegate adddelegate)
        {
            Console.WriteLine(adddelegate(x, y));
        }

        static void Main(string[] args)
        {
            // (1.)メソッドを使った足し算
            add(1, 2, hoge);

            // (2.)匿名メソッドを使った足し算
            add(1, 2, delegate(int x, int y) { return x + y; });

            // (3.)ラムダ式を使った足し算
            add(1, 2, (x, y) => x + y);
        }
    }
}

 

一般的な日本人が英語を聞き取る時には、
頭の中で英語を日本語に翻訳しているみたいです。
(だから、日本人は英語が下手だって話を昔聞いたね。)

その伝統に倣い、C言語脳の僕はC#のコードをC言語に置き換えてみました。
適当に書いたので、コンパイルが通るか怪しいですが……C言語で言えばこんな感じ?

typedef int (AddFunc)(int x, int y);
int hoge(int x, int y)
{
  return x + y;
}

void add(int x, int y, AddFunc func)
{
  printf("%d", func(x, y));
}

void main(void)
{
  // (1.)メソッドを使った足し算
  add(1, 2, hoge);
  // (2.)匿名メソッドを使った足し算
// Cでは確実にコンパイルは通らないのでコメントアウト(・ω・)
// 関数を定義するまでも無いし、名前考えるのが面倒だし
// コーディングが楽になるでしょう的感じ?
//  add(1, 2, (int hoge(int x, int y){return x + y;}) );
}

 

つまりdelegateは、C言語で言うところの関数ポインタかー。
んでもって、C#では関数ポインタを渡さなくても
匿名メソッドという方法があって、処理だけを書くってのも大丈夫。

MSDNで答え合わせをしたら、まんま
「デリゲートは、C や C++ の関数ポインタと同じように、
メソッドを安全にカプセル化する型です。」と書いていました。
http://msdn.microsoft.com/ja-jp/library/ms173172(VS.80).aspx

 

次は、ラムダ式ですね。
これはさすがにC言語に置き換えは不可能なので、別方面から攻めて行きます。

  // (3.)ラムダ式を使った足し算
  add(1, 2, (x, y) => x + y);

 

ラムダ式ってのは匿名メソッドの代わりに式だけを書いていると考えても良いのかな。
上のコードでは、「(x, y) => x + y」の部分がラムダ式。

(x, y)は、入力値で、
=> は、入力値のデータはこう使うんだぜ!という宣言
x + yは、入力値をどう使うか(式)
って考え方で当たってるのかな?

具体的にどれだけコーディングが楽になるか、よく判らないなぁ。
C言語脳の僕には、匿名メソッドのが直感的なんだけど、単に慣れの問題かな。

投稿日時 : 2008年5月30日 0:36

コメント

# re: [C#]ラムダ式に挑戦してみた 2008/05/30 1:17 渋木宏明(ひどり)
このエントリの使い方だとあまり差が出てきませんが、構文上の特色としては、匿名デリゲートはブロックを強要されますが、ラムダ式は単独の式またはブロックのどちらも記述することができます。

ラムダ式の旨味は単独ではなかなか見えてきません。
LINQ なんかと組み合わせたときに威力を発揮します。

# re: [C#]ラムダ式に挑戦してみた 2008/05/30 6:28 R・田中一郎
>ラムダ式ってのは匿名メソッドの代わりに式だけを書いていると考えても良いのかな。

そんなあなたは、6月の勉強会でRさんのセッションを聞こう!www

# re: [C#]ラムダ式に挑戦してみた 2008/05/30 6:30 R・田中一郎
あっ、ちなみに東京です。
6月にお会いしましょう!www

# re: [C#]ラムダ式に挑戦してみた 2008/05/30 17:02 siokoshou
>式だけを書いていると考えても良いのかな。
大正解です!

数学の式と思えばOKで、f(x)=x+1 を x => x+1 と書けるというだけのことです。
数学を習ってる子供にでもわかるような簡単なものなのに、「ラムダ式」っていう難しそうな名前なのは残念なことです。


# ブランド財布コピー激安 2016/02/25 16:57 e6ls1pm194
http://www.bestevance.com/rolex/gmt/116710BLNR.html
スーパーは時計をコピーしますブランド偽物、偽物ブランド、ルイヴィトンコピー、 ロレックスコピー、シャネルコピー、グッチコピー、エルメスコピー、 ボッテガヴェネタコピー、 バーバリーコピー、ミュウミュウコピー、トリーバーチコピー、バレンシアガコピー、ディオールコピー、ブルガリコピー、ブラダコピー、 ドルチェ&ガッバーナコピー、オメガコピー、フランク ミュラーコピー、gagaコピー。 }}}}}}

# poMoSeiArHuglHB 2017/05/19 8:54 JimmiXzSq
wzHIPR http://www.LnAJ7K8QSpkiStk3sLL0hQP6MO2wQ8gO.com

Post Feedback

タイトル
名前
Url:
コメント