okuzawatsの日記

Android / Kotlin / GitHub Actions Enthusiast 🤖

[Kotlin] 末尾カンマ

Kotlinの末尾カンマは、Kotlin 1.4において導入されました。引数リストの最後の要素の後にカンマを付けられる文法です。以下の val c: Int,, の部分を指しています。Kotlin 1.4から、この , の部分を追加することが可能になりました(なくても良い)。

data class AwesomeDataClass(
  val a: Int,
  val b: Int,
  val c: Int,
)

この末尾カンマが導入されて一番嬉しいのは、ここに新たな引数を追加した場合に、追加した行にのみ差分が生じることです。以下のような差分です。

   val c: Int,
+  val d: Int,
 )

末尾カンマを使わない場合の差分は以下のようになります。

-  val c: Int
+  val c: Int,
+  val d: Int
 )

末尾カンマを使った場合は、追加された引数の行にだけ差分が生じています。追加された箇所にだけ着目して差分を見ることが可能です。

引数を横に並べる場合は末尾カンマがあってもあまり嬉しくはありませんが、引数を縦に並べる場合は末尾カンマがあると嬉しいです。自分は引数を縦に並べたいので、(Kotlinのバージョンが1.4以前の場合を除いて)可能な限り、末尾カンマを使うようにしています。また、コードレビューなどでも、IMO1、IMHO2として、末尾カンマの使用を広める活動を地道に行っています。

なお、Kotlin公式のCoding conventionsには、以下の記述があります。変更の差分が見やすくなるというメリットの他に、引数の順序を入れ替えることとコードの生成が容易となることが、末尾カンマのメリットとしてあげられています。

  • It makes version-control diffs cleaner – as all the focus is on the changed value.
  • It makes it easy to add and reorder elements – there is no need to add or delete the comma if you manipulate elements.
  • It simplifies code generation, for example, for object initializers. The last element can also have a comma.

References

  1. What’s new in Kotlin 1.4 | Kotlin、Retrieved from https://kotlinlang.org/docs/whatsnew14.html)(最終アクセス日:2022/05/31)
  2. Coding conventions | Kotlin、Retrieved from https://kotlinlang.org/docs/coding-conventions.html#trailing-commas)(最終アクセス日:2022/05/31)

  1. in my opinion。私の意見では、の意味。 ↩︎

  2. in my humble opinion。IMOより弱い表現。 ↩︎

#Kotlin

書いている人 😎

profile

茨城県つくば市在住のモバイルアプリケーションアーキテクト(Androidが得意です)。モバイルアプリのアーキテクチャ、自動テスト、CI/CDに興味があります。いわゆる「レガシーコード」のリファクタリング・リアーキテクチャが好きです。

Androidプロジェクトの開発速度低下にお悩みで、お手伝いが必要でしたら、メールフォームよりお気軽にお問い合わせください。

👉 もっと詳しく

著書 ✍

Android MVVMアーキテクチャ入門 🛠

Androidアプリ開発の初学者に向けた、MVVM(Model-View-ViewModel)アーキテクチャの入門書を書きました。初学者の方を確実にネクストレベルに引き上げる技術書です。NextPublishingより出版されています。

販売サイトへ 🏃

Android ユニットテスト ヒッチハイク・ガイド 🧳

Androidアプリのユニットテストに入門するためのガイダンスです。初学者が混乱せずにAndroidアプリのユニットテストを書き始めることができる、ということを目的としています。

販売サイトへ 🏃

関連記事 👀

お問い合わせ 📨

お名前

メールアドレス

お問い合わせ内容