9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ドワンゴAdvent Calendar 2021

Day 8

3年間のコーディング規約の変遷に見る Kotlin の変化

Last updated at Posted at 2021-12-07

この記事はドワンゴ2021年アドベントカレンダー12/8の記事です。
昨日は @yoshikyoto さんの 動画サービスの部署から課金システムに来て学んだこと でした。

先日、Kotlin 1.6.0 がリリースされました。

個人的に Kotlin の公式コーディング規約の日本語訳をまとめています。
3年ぶりに更新してみたところ、更新差分から3年間の Kotlin の変化が垣間見えました。
ちなみに、3年前というと、Kotlin 1.2.20 くらいのころです。
年の瀬に今年(3年分?)の Kotlin のまとめと振り返りということで、トピックを3つ取り上げてご紹介します。

Kotlin Multi Platform

3年前のコーディング規約時点では、「Javaの推奨に従う」という記述がいくつか見られました。
現在では、この3年の間に推進された Kotlin Multi Platform に伴い、このような記述はより具体化されて置き換えられています。

Kotlin は Java との相互運用が容易であるというのがアピールポイントのひとつです。
3年前の時点ではベター Java としての側面が大きかったと思います。
Java バージョンの制約が厳しかった当時の Android 開発における有力な選択肢となり、現在では Android 公式が推奨する言語となっています。

以上の背景から、当時のコーディング規約においても、「Javaの推奨に従う」という文言が散見されていました。
Java との相互運用を念頭においているので、コーディング規約上も Java 文化に親しい人が読む想定だったのでしょう。

現在では Kotlin は Multi Platform を推進しています。
Kotlin/JVM だけでなく、 Kotlin/Native、 Kotlin/JS と拡大しています。
モバイルに限らず Web やデスクトップ、バックエンドなど広範な範囲をカバーする言語として進化しています。
現在でもベター Java という側面はありますが、それは当たり前の周知の事実です。
むしろ、Java 文化に親しいとは限らない、様々なバックグラウンドの人々が Kotlin を選択することが増えました。
結果、「Javaの推奨に従う」という記述はより具体的になりました。

末尾カンマ(trailing comma)

3年の間に様々な機能が Kotlin には追加されてきました。
多くの機能の中でも、コーディング規約に記載されるようなものは、Kotlin エンジニアが目にする機会が多い汎用的な機能と言えるでしょう。
そんな機能が 末尾カンマ(trailing comma)です。

末尾カンマは複数の要素を列挙する際に、最後の要素の後ろにもカンマを付けられる機能です。
Kotlin 1.4 で追加されました。
Javascript など他の言語にもありますね。

class Person(
    val firstName: String,
    val lastName: String,
    val age: Int, // trailing comma
)

上記の例では、 age の後ろにあるのが末尾カンマです。

末尾カンマの効用は規約上もいくつか挙げられています

  • バージョン管理での差分がきれいになる(末尾カンマがない場合、末尾に要素を足すと直前行の末尾にもカンマをつける必要があります)
  • 要素の追加・順番の変更が簡単になる(末尾カンマがない場合、カンマをつけたり消したりする必要があります)
  • コードの自動生成が容易になる(末尾の要素かどうかでカンマの有無を分岐する必要がありません)

個人的にも上記効用には同意するところで、この機能が追加されたときはとても嬉しかったです。
3年間の更新差分のうち、コーディング規約上にまとまった文章が追加されたのはこの機能だけでしたので、普段のコーディングで助けになる機能であることは間違いないでしょう。

一方でコーディング規約は、末尾カンマの利用を推奨してはいるものの、実際の利用は利用者の判断に委ねるとしています。
各々のチームで合意をとるとよいでしょう(IDEで設定することも可能です)。

Scope functions

Kotlin の便利な標準ライブラリの関数がスコープ関数 - letalsoapplyrunwith - です。
これらの関数は便利な一方で、むやみな使用はコードの可読性を下げる要因にもなります。
チームによっては特定のスコープ関数の利用を制限していることもあるかもしれません。

もともと、コーディング規約にもそれなりの分量でスコープ関数の利用指針が記載されていました。
時を経て、スコープ関数はそれ単体で記事が切り出されました。

この変遷はスコープ関数の存在感の大きさを示していると感じます。

現在は大まかな選択指針それぞれの関数の利用方法が記載され、よりわかりやすくなりました。
いずれかの関数の利用が非推奨ということもありません。
みなさんも用法用量を守って、適切にご利用ください。

終わりに

コーディング規約の変遷から、大きなトピックと感じた3つについて紹介しました。

次回は 12/9 @macinjoke さんの Web フロントエンドについての記事です。
お楽しみに!

9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?