好きなタイミングで特定の処理を行う


そういうとき、高階関数が便利です。

高階関数 - Wikipedia


フォーマット



関数型の指定は、以下のように書きます。

    (引数の型[, 引数の型]...) -> 戻り値の型



使用例



関数を引数として渡す


関数を引数として渡せば、振る舞いの定義だけすることが出来ます。

Ajaxのコールバックなどが好例です。

引数として関数オブジェクトを受け取るには、次のように書きます。

fun printResult(callee: (Int, Int) -> Int, val1: Int, val2: Int): String {
  val result = callee(val1, val2)
  return "Result : $result";
}

この例では、第一引数に関数を受け取るように定義しています。 受け取る関数は、第一、第二引数、戻り値ともにInt型を指定しています。



関数を戻り値として受け取る



逆に関数オブジェクトを戻り値として受け取れば、好きなタイミングで 実行できます。

fun example2(val1: Int): (Int, Int) -> Int {
    return {x, y -> (x + y) % val1};
}

関数型には引数で受け取る場合と同じ型を指定しています。

返す関数は関数リテラルで、クロージャーを使用して引数として渡された値を使用するように書いています。