ラムダ式ってなに?

Scala

ラムダ式は無名関数のことを指す。
ただ、普段自分で定義しているような関数ではなくて、変数にしまえる
いわゆる式なのがラムダ式になる。

スポンサーリンク

関数とラムダ式

例えば、Int型の値を受け取って5を加算し出力するだけの関数を定義してみる。

def lambda(num: Int): Unit = {
	println(num + 5)
}

これをラムダ式に直して見ると

val lambda = (num: Int) => println(num + 5)

こうなる。

この右辺の
(num: Int) => println(num + 5)
がラムダ式になる。

別の書き方をしてみると

val lambda : Int => Unit = x => println(x + 5)

こんな書き方もできる。

ようはInt型の値を一つ受け取って、戻り値にUnit型(Javaでいうvoid,戻り値なし)を返す式。
その式をlambdaという変数に格納している状態になる。

スポンサーリンク

ラムダ式の使いどころ

ここまでの説明だとわざわざ式にする必要はないのでは?ってなると思う。
実際これで処理として完結するならこの関数はこれで良いと思う。
しかしラムダ式は引数として渡すことができる。

今度は関数として以下の関数を定義してみる。

def func(formula: Int => Unit, num: Int): Unit = {
	formula(num + 5)
}

引数formulaの型がInt => Unitになっている。
このfunc関数は、引数にIntを受け取りUnitを返すラムダ式(formula)と、Int(num)を受け取る。
その後、引数に受け取ったラムダ式にもう一つの引数numに5を加算したものを渡して処理をさせる。

先ほど定義したラムダ式と、5を渡した結果を見てみよう。
(lambda.scala)

val lambda : Int => Unit = x => println(x + 5)

def func(formula: Int => Unit, num: Int): Unit = {
	formula(num + 5)
}

func(lambda, 5)
username$ scala lambda.scala 
15

このような結果になる。

今回はラムダ式の中でもfunc関数の中でも値に対する処理としては5を加算するだけなので、今ひとつ利点が見出せないかもしれない。
なのでそのうちイメージしやすい例題に乗っ取ったコードを載せていきたいとおもうし、Javaのラムダ式について書くかもしれない。

コメント

タイトルとURLをコピーしました