Kotlin - 関数

公開日:2019-11-06 更新日:2019-11-06
[Kotlin]

1. 概要

関数とは、入力(引数)と出力(戻り値)がある小さいプログラムのことです。
数学の関数とは異なり、戻り値がない関数も作成できます。


2. 関数の定義

fun add(v1: Int, v2:Int, v3:Int = 0): Int {
    return v1 + v2 + v3
}

fun main() {
    // 関数の呼び出し
    val result1 = add(1, 2, 3)
    
    // 引数名を指定すると、定義の順序とは異なる順序で指定できる
    // また、引数名を付けた方が読みやすくなる場合がある
    val result2 = add(v2 = 2, v1 = 1, v3 = 3)
    
    // 3番目の引数は初期値が設定されているため省略可能
    val result3 = add(1, 2)
    
    println(result1) // 6
    println(result2) // 6
    println(result3) // 3
}

戻り値がない場合は、戻り値の型を Unit にします。
Unit は省略可能です。
//fun log(msg:String):Unit { 
fun log(msg:String) {
    println(msg)
}

fun main() {
    log("test")
}


3. 可変長引数

vararg を使うと、引数の数を可変に出来ます。
fun add(vararg values:Int):Int {
    return values.sum()
}

fun main() {
    val result = add(1, 2, 3, 4, 5)
    println(result) // 15
}


4. 関数内関数

関数内に関数を定義することができます。

fun main() {
    val level = "[debug] "

    fun log(msg:String) {
        println(level + msg) // 関数の外の変数も参照可
    }

    log("Test") // [debug] Test
}


5. 無名関数(匿名関数)

無名関数は変数に代入して使うことができます。
戻り値がある場合は return を使います。
val add = fun (v1:Int, v2:Int):Int  {
    return v1 + v2
}
println( add(1, 2) ) // 3

後ろに () を付けて、すぐに実行することもできます。
val result = fun (v1:Int, v2:Int):Int {
    return v1 + v2
}(1, 2)
println( result ) // 3


6. 関数の参照

無名関数ではない普通の関数の参照は、「::関数名」として取得できます。
取得した参照は、無名関数やラムダ式と同様に、変数に代入したり、関数の引数として渡すことができます。

fun add(v1:Int, v2:Int):Int = v1 + v2
fun mul(v1:Int, v2:Int):Int = v1 * v2

fun calc(f:(Int, Int) -> Int, v1:Int, v2:Int):Int {
    return f(v1, v2)
}

fun main() {
    println(calc(::add, 5,10)) // 15
    println(calc(::mul, 5,10)) // 50

    val f = ::add
    println( f(1, 2) ) // 3。 add(1, 2) が実行される
}