関数 - ブロックボディとエクスプレッションボディ
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 }
ブロックボディと違うのは、戻り値の型のあと、「=」記号に続いて式を記述するところです。ここでは if 式を使って、関数の本体を記述しています。
式は一行で書いてもいいですし、{} で括ってブロックとして記述しても良いです。
また、エクスプレッションボディの場合は、return キーワードは省略できます。
関数の呼び方と結果は、もちろん同じです。
また、変数の定義と同様に、戻り値の型が推測可能である場合は、次のように戻り値の記述を省略することができます。
fun min(a: Int, b: Int) = if(a < b) { a } else { b }
以上、Kotlin での基本的な関数の記述方法について説明しました。
さらに、Kotlin では特にラムダ式などは頻出なので、しっかりマスターしておきましょう。