LoginSignup
1
0

More than 5 years have passed since last update.

kotlinで関数の戻り値として関数を渡したい

Posted at

はじめに

つい先日kotlinを勉強し始めたのですが、関数の引数に関数を渡す例はいっぱいあるからわかる!
けど、関数を戻り値として扱う例は見つからずに、どうしたらいいんだろうと色々探し回ってました・・・

探し方が悪かったのか結構苦労したので、すごいピンポイントですが記事にしました。

関数の戻り値として関数を渡す

早速、結論を言うと以下の感じで書けば大丈夫なようです。

fun 関数名(引数): (戻り値として返す関数の引数) -> (戻り値として返す関数の戻り値の型) {
    // なんかの処理
    return 戻り値の関数
}

引数として関数を指定する方法と同様の表記を、関数の戻り値型の位置で指定すれば良いようです。

サンプル

せっかくなので関数の引数に関数を渡す例としてクロージャのサンプルを作ってみました。

fun functionGenerator(outerStr: String) : (innerStr: String) -> Unit {
    val outer = outerStr
    return fun (innerString){
        println("outer value : $outer")
        println("inner value : $innerString")
    }
}

fun main() {
    val funInstance = functionGenerator("this is outer function arg")
    funInstance("this is inner function arg")

    functionGenerator("outer func")("inner func")

}

関数の戻り値の型指定は(innerStr: String) -> Unitの部分です。
functionGeneratorの戻り値はString型のinnerStrを受け取って、戻り値なしの関数と言う意味ですね。
実際の戻り値は、return fun(innerString)で関数を作っています。

main側ではfunctionGeneratorを呼び出してfunInstanceで関数を受け取って実行します。

val funInstance = functionGenerator("this is outer function arg")
    funInstance("this is inner function arg")

また、一回しか使わないのであればfunctionGeneratorで戻ってきた関数を即時実行することもできます。

functionGenerator("outer func")("inner func")

終わりに

関数の戻り値型の指定に、引数として関数を指定する方法と同様の表記() -> ()すればいいだけでした・・・
同じところでつまづいた方のお力になれればいいなぁと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0