Kotlinの関数の中括弧を省略してイコールを使っているのはなんだろう
2022-09-13
はじめに
業務で Kotlin を書くときに時々関数の{}
を省略して=
を使っているものを見かけることがあります。具体的には以下のようなコードです。
Example.kt
fun double(x: Int): Int = x * 2
自分の感覚だと普通 ↓ みたいに書くよな…と思っていました。
Example.kt
fun double(x: Int): Int {
return x * 2
}
一体どんな違いがあるんだろうと思って、色々調べたのでメモしておきます。
関数を=で指定している正体
結論、=
で書いても{}
で書いても同じ意味みたいでした。ただし=
で書くときには条件があり、関数内の処理が一行の場合のみ、{}
を省略し、=
を使えるそうです。
Kotlin の公式のドキュメントでは、Single-expression functionsに説明がありました。この記法のメリットは、関数の返り値を省略できるというメリットがあります。
Example.kt
// こんな感じで「: Int」を省略できる
fun double(x: Int) = x * 2
最後に
関数の{}
を=
に置き換えている正体について調べてみました。この記法を使うためには関数内のコードが一行である必要があるため、実際に使うことはそんなないんじゃないかな?と思っていたのですが、メッソドチェーンを多用するコードでは、この記法を覚えておいて損はないという記事を読んで、なるほど!!と納得しました。
自分自身が使ってこなかったというのもあって可読性の面においては、微妙なのかな?と思ったりもしました。ただ、そこは慣れの問題な気がするので、チームで話し合ってどうやって運用していくといいのか決めると良さそうと思いました。