Kotlin における trailing comma(末尾カンマ) について

アスクルの こたにん (@Kotanin0) です。

2020年のリリースですが、Kotlin 1.4からtrailing commaが実装 されました。
trailing comma とは 末尾カンマ と訳されるもので、関数などの引数のリストの末尾にあるカンマのことを指します。

fun usingComma(
    first: String,
    second: String,
    third: String, // <- ココのカンマのことを trailing comma(末尾カンマ) と呼ぶ
)

めちゃくちゃ細かい仕様ですが、Kotlin1.4からは、このtrailing commaを記述できるようになりました。

trailing comma のいいところ

trailing comma を使うといいところは大きく2つです。

  • パラメータ変更時の差分が1行で済む
  • 行の入れ替えが容易

パラメータ変更時の差分が1行で済む

先ほどの関数に、パラメータを1つ増やしたとします。

fun usingComma(
    first: String,
    second: String,
    third: String,
    fourth: String,
)

trailing commaがある場合とない場合では、差分が変わってきます。

trailing comma有無でのdiff

trailing commaがない場合は、差分が2行になってしまっています。
trailing commaがある場合は、差分がたったの1行でシンプルですね。

このように差分がわかりやすいというのは、開発者にとっては小さいようで大きいですね。

行の入れ替えが容易

そこまで遭遇することではないかもしれませんが、フィールドの見た目上の順番を入れ替えたいときにも、trailing commaは有能です。
Kotlin公式ドキュメント にも、以下文章の記載があります。

After adding a trailing comma, you can then easily swap lines with parameters or values.

trailing commaがない場合は、フィールドを入れ替えた後に、末尾カンマをつけかえる必要があります。
ですがtrailing commaがある場合は、どのフィールドにもカンマがついているので、フィールドを入れ替えればおわりです。

オペレーションが少なくて済むというのもやはり、開発者にとってはよいことですね。

IntelliJ IDEA, ktlint, detekt の対応状況

trailing commaは、コーディングする際に意識できればよいですが、全員で統一することは難しいです。
リポジトリや言語によっては、trailing commaをつけないルールだったり、つけられない言語だったりもあるためです。

Kotlin においては、trailing commaが追加されてから、各種コード解析ライブラリやIDEも追従して対応されてきています。

IntelliJ IDEAでは、コードスタイルでtrailing commaを適用できるようになっています。
https://www.jetbrains.com/help/rider/Trailing_Commas_Style.html

ktlint では、すでにルールとして追加されています。
https://github.com/pinterest/ktlint/issues/709

detekt でも、次回リリースタグで導入される予定です。
https://github.com/detekt/detekt/pull/4227

まとめ

今回は、とても細かいところですが trailing comma についての紹介でした。
Kotlinに関するtrailing commaの言及をしましたが、他の言語でもこの仕様を持っている言語は多いので、ぜひ使ってみてください!

ASKUL Engineering BLOG

2021 © ASKUL Corporation. All rights reserved.