こんにちは😀
今回も、ラムダ式をやっていきます。
ラムダ式はデータ型をもつ値なので、集合体の要素としても
使えます。
集合体の要素を関数にして書いてみましょう。
val calculate:List<(Int,Int)->Int> = listOf( {a,b-> a+b}, {a,b-> a-b}, {c,d-> c*d} )
変数calculateに、ジェネリック型であるList型の要素として、
関数の型を指定しています。
そのため、ラムダ式の引数である「a」「b」「c」「d」に、
データ型の指定は不要になります。
そのままInt型として解釈してくれます。
ラムダ式の引数は、ジェネリックで指定したようにInt型の2つの値から1つのInt型を指定する形であればOKです。
さらに、引数に変数calculateを持つshowCalc関数を作成します。
戻り値で、この変数に変数aとbを引数にして処理した値をセットしています。
fun showCalc(a:Int, b:Int, calculate:(Int,Int)->Int):String{ return “答:${calculate(a,b)}” }
では、main関数を書いてみましょう。
最初に書いた変数calculateをメンバ変数として記述します。(3行目)
その後は、変数calculateのリストの要素を1つづつ取り出し変数calcにセットします。(8行目)
showCalc関数に引数をセットして値を出力しています。
fun main(args: Array<String>) { val calculate:List<(Int,Int)->Int> = listOf( ・・・・・・・・ ) for (calc in calculate) { println(showCalc(5,6, calc)) } }
実行します。
足し算、引き算、掛け算の順に出力されています。
使うにはだいぶ慣れが必要になりますが、使い慣れれば複雑な計算や処理もだいぶスリムに記述することができるのが分かります。
普段ラムダ式は使わないのでまだまだ慣れが要りますが、積極的にラムダ式も使っていこうと思います。
今回はここまで🤚
では、また次回。
コメント