読者です 読者をやめる 読者になる 読者になる

rubyのラムダ式

ラムダ式ってご存知でしょうか?

自分は全く知りませんでした。

C言語の参考になりますが、概念として書かれていたので、載せておきます。

参考:ラムダ式 (C# プログラミング ガイド)

ラムダ式は、デリゲート型または式ツリー型を作成するために使用できる匿名関数です。 ラムダ式を使用すると、引数として渡すことができるローカル関数、あるいは関数呼び出しの値として返すことができるローカル関数を記述できます。 ラムダ式は、LINQ クエリ式を記述する場合に特に便利です。 ラムダ式を作成するには、ラムダ演算子 (=>) の左側に入力パラメーター (ある場合) を指定し、反対側に式またはステートメント ブロックを置きます。たとえば、ラムダ式 x => x * x は、x という名前のパラメーターを指定し、x を 2 乗した値を返します。次の例に示すように、この式をデリゲート型に割り当てることもできます。

元々は数学で使われており、式を抽象化するための方法として編み出されました。 参考で載せたものは、数学で使っていた関数式に当てはめることができます。

f(x) = x * x
f(5) = 5 * 5 -> 25

中学・高校時代にやったことがある、懐かしい式ですね。ここから数学嫌いが始まったかたも多いかもしれませんが、xが変数という、抽象化して書かれているので、分かりにくくなると思います。できるだけ具体化して書けば、イメージが付きやすくなります。

これをrubyで書くことができます。

f = -> (x) { x * x }←{ x * x }が評価式になり、実行する場所になる

p f.call(5) -> 25 

置き換えした内容
f = -> (5){ 5 * 5 }→25

呼び出し方は3種類あります。

p f.call(5)
p f[5]
p f.(5)

もちろん、これをもう少し変数を加えたものも作成することはできます。

f = -> (x, y) { 2 * x + 3 * y }

p f.(10, 10)→50

置き換えした内容
f = -> (10, 10) { 2 * 10 + 3 * 10 }

これといった使い道は思いつかないのですが、->が出てきたときに、ラムダ式で評価をしているという風に捉えることができたら、ソースコードを読む能力が上がるのかなと思いました。