1. doyaaaaaken

    No comment

    doyaaaaaken
Changes in body
Source | HTML | Preview
@@ -79,10 +79,35 @@
* 文法的に簡単でKotlinに詳しくない人でも一目瞭然
* 今までこの方式で書いていなかったとしても、この方式への移行は安全にできる(コードの変更のみでDBのデータ型は変わらない。)
* デメリット
* Idを振りたいものができるたびにIdを定義しなければいけないので毎回コードを書かなければいけない
+なおKotlin固有のTipsとして、Kotlin1.3からExperimentalな機能としてサポートされているinline classを使えば、Javaバイトコードに変換時にパフォーマンスの良いコードになります。
+[公式ドキュメント](https://kotlinlang.org/docs/reference/inline-classes.html)を見るとWrapperクラスのオーバーヘッドを無くすための機能と記載されており、まさに今回のようなUserId、CompanyIdに対して使うのは良いことだとわかります。
+
+> Sometimes it is necessary for business logic to create a wrapper around some type. However, it introduces runtime overhead due to additional heap allocations. Moreover, if the wrapped type is primitive, the performance hit is terrible, because primitive types are usually heavily optimized by the runtime, while their wrappers don't get any special treatment.
+
+> To solve such issues, Kotlin introduces a special kind of class called an inline class, which is declared by placing an inline modifier before the name of the class:
+
+コードは以下のようになります。
+inline classの場合はdata classにすることはできないようなので、data classの利点は失われるという欠点はあります。
+
+```kotlin
+//差分はこの2行!data class⇒inline classに変えただけ。
+inline class UserId(val raw: Long)
+inline class CompanyId(val raw: Long)
+
+data class User(val id: UserId)
+data class Company(val id: CompanyId)
+
+val userId = UserId(1L)
+val companyId = CompanyId(100L)
+
+//userIdとcompanyIdを間違えて指定すると、コンパイルエラーで検知できる!!
+val user = User(companyId)
+```
+
### 4. 統一的なId型を作り、それを利用して各Id型を利用する
以下のようにIdentifier型を作って使うことで型安全にします。
```kotlin