kotlinでの関数の書き方。ラムダ式などの書き方のサンプル
 他の言語を知っている人で、細かい説明はいいから、どう書けばいいのかだけを知りたいんだよって人のために。

 
//基本の関数の宣言の仕方 変数の型は変数や関数名の後に記述する
fun test(num: Int): Int { return num * 1 }

//無名関数 関数を変数に入れられる。test2(2)みたいに実行できる
//(int) -> int はintが引数で返値がintの関数が入るという意味
var test2: (Int) -> Int = fun (num: Int): Int { return num * 2 }

//変数の型を省略 返値が明らかな場合は変数の型を省略できる
//引数と関数の返値にintがあるから int -> int が省略できる
var test3 = fun (num: Int): Int { return num * 3 }

//1行で返値がある場合は波括弧の省略可能
//returnがなくても返値として返してくれる
var test4 = fun (num: Int): Int = num * 4

//波括弧を省略して返値が明らかなとき返値の型を省略可能
var test5 = fun (num: Int) = num * 5

//変数の型を明示してあれば無名関数の引数と返値の型を省略可能
var test6: (Int) -> Int = fun (num) = num + 5

//ジェネリクス関数の記述の仕方
fun  test7(num: T): Int { return (num as Int) * 5 }

//ジェネリクス関数 ジェネリクス2個
fun  test8(num: T, num1: R): Int {return (num as Int) + Integer.parseInt((num1 as String))}

//ラムダ式でfunの省略
var test9: (Int, Int) -> Int = { x: Int, y: Int -> x + y }

//変数の型を明示しているのでラムダ式内部の型を省略可能
var test10: (Int, Int) -> Int = { x, y -> x + y }

//ラムダ式内部で型を明示しているので変数の型を省略可能
var test11 = { x: Int, y: Int -> x + y }

//ラムダ式を引数として渡して利用できる
var test12: (Int, (Int) -> Int) -> Int = fun (num: Int, exp: (x: Int) -> Int ): Int = exp(num)
var test13: Int = test12(1, { x -> x * x }) 

//ラムダ式の引数が一つなら省略できる itが代替になる
var test14: Int = test12(1, { it * 2 }) 

//関数を引数として渡して利用できる
var test15: Int = test12(1, test6)