2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ラムダ式とは

関数型言語由来の概念。
関数型言語とは「関数を値と同じ様に扱える」言語。

"値"というのは数値とか文字列とかリストとか。
値と同じ様に扱えるとは、

  • 変数に代入できて
  • 関数の引数に渡せて
  • 関数の戻り値にできる

ということ。

例えば、引数に値をとり、それに10を足して返す関数

F(x) = x + 10

のような関数。
関数型言語ではこの関数を値として取り回せる。

では、上記の関数を変数に代入するにはどうすればよいか。
この「値として取り回せる関数の書き方」がラムダ式。

例えば、関数型言語のHaskellでは上記の関数は

 f = x -> x + 10

というふうに記述できる。

「【数値xを受け取り、それに10を足した値を返す関数】を、fという変数に代入した」と思って下さい。

この書き方は言語により異なるが、どれもラムダ式である。
どれも「値として取り回せる関数の書き方」を定義したものだから。
-> とか => とか細かな書き方の違いは関係ありません。

と、ここまでがラムダ式の話なのだがJavaやC#では少々事情が異なる。

これらはクラスあっての言語なので関数はクラスの中、つまりメソッドという形でしか存在できないからです。

なので、function(C#だとFunc)インターフェイスを作り、擬似的に関数として取り回せる様にしている。

例えばJavaで

Function<Integer, Integer>f = new Funciton<>(){
    public Integer apply(Integer x){
        return x + 10;
    }
}

の省略記法に過ぎないわけです。

単なるインスタンスなので、変数に代入できるし、引数にも戻り地にも出来る、というわけです。

以上がラムダ式の説明になります。

  • 「そもそもラムダ式とはなんなのか」
  • 「(関数型言語由来の概念である)ラムダ式を、オブジェクト志向言語に落とし込むには?」

がごっちゃになると一気にわけがわからなくなるので、この2つは分けて考えたほうが良いですね。

2
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?