関数 - ブロックボディとエクスプレッションボディ

Kotlin で関数を書くときの基本スタイルは次の二つです。

  • ブロックボディの関数
  • エクスプレッションボディの関数

ブロックボディの関数

ブロックボディの関数と言われるタイプの関数は、他の言語などでもお馴染みの、いわば「普通の」形式です。

Kotlin の関数

関数はキーワード fun で記述します。関数名のあと、パラメータは「変数名:データ型」を並べて書きます。

関数の戻り値は、パラメータリストの後に「: データ型」として書きます。戻り値がない場合は何も書きません。

例として、「Int 型のパラメータ a と Int 型のパラメータ b を受け取り、a と b で小さい方を返す (Int 型の結果を返す) 関数 min」は次のように書けます。

fun min(a: Int, b: Int) : Int {
    if( a < b ) {
        return a
    } else {
        return b
    }
}

戻り値は明示的に return で返す必要があります。

これを実行するコードを含めて記載すると次の通りです。

fun min(a: Int, b: Int) : Int {
    if( a < b ) {
        return a
    } else {
        return b
    }
}

fun main(args: Array<String>) {
    var c = min(10, 20)
    println( "c = ${c}" )
}

実行結果は次の通り。

c = 10

エクスプレッションボディの関数

Kotlin ではエクスプレッションボディの関数というのも定義できます。

エクスプレッション (expression) は「式」と言って、評価されてひとつの値を表します。Kotlin では if も式です。(他の多くの言語では if は「文 (ステートメント)」です)

上と同様の働きをする関数を、エクスプレッションボディの関数として書くと、次のように書けます。

fun min(a: Int, b: Int) : Int = if(a < b) {
    a
} else {
    b
}

Kotlin の関数

ブロックボディと違うのは、戻り値の型のあと、「=」記号に続いて式を記述するところです。ここでは if 式を使って、関数の本体を記述しています。

式は一行で書いてもいいですし、{} で括ってブロックとして記述しても良いです。

また、エクスプレッションボディの場合は、return キーワードは省略できます。

関数の呼び方と結果は、もちろん同じです。

また、変数の定義と同様に、戻り値の型が推測可能である場合は、次のように戻り値の記述を省略することができます。

fun min(a: Int, b: Int) = if(a < b) {
    a
} else {
    b
}

以上、Kotlin での基本的な関数の記述方法について説明しました。

さらに、Kotlin では特にラムダ式などは頻出なので、しっかりマスターしておきましょう。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Kotlin 入門