ラムダ式は無名関数のことを指す。
ただ、普段自分で定義しているような関数ではなくて、変数にしまえる
いわゆる式なのがラムダ式になる。
関数とラムダ式
例えば、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のラムダ式について書くかもしれない。
コメント