Kotlinには拡張関数という仕組みがあり、既存のクラスにメソッドを追加することが可能です。
例えば以下コードでは、Int型にsum()メソッドを追加しています。
fun Int.sum(num: Int): Int { return this + num }
その結果、以下のような記述が可能になります。
val answer = 1.sum(2) println(answer) // 3が出力される
このような関数の書き方を「関数リテラル」と言い、関数の中で記述される「this」をレシーバと言います。(例でいう1
)
なお最初のコードは、以下のように記述することも可能です。
val sum: Int.(Int) -> Int = fun Int.(num): Int { return this + num }
:
の後のInt.(Int) -> Int
は関数の引数と返り値の型で、()
内のIntは引数であるnumの型を、->
の後のIntは返り値の型を表しています。