Introduction to Kotlin 日本語訳

# はじめに
本記事は、[Kotlin/Everywhere](https://events.withgoogle.com/kotlin-everywhere/) というイベントの
[Organizer guide](https://docs.google.com/presentation/d/e/2PACX-1vRgpxfZ8nj2V3J_dfI9Z9_YW4vdP-neemsRlQHAVt0f8T614HAQIJQaoIKCMvVsafbg87uT-pppl-0Z/pub?start=false&loop=false&delayms=60000) 内にリンクがある [Intro to Kotlin](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w) の日本語訳です。

※Kotlin/Everywhere in Ehime 向けの補足資料です
※2019/07/28 時点の資料で訳しています。

# [Introduction to Kotlin](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.p)

# [Kotlin とは](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.g556406b9e6_0_66)
* 汎用的な言語
* オブジェクト指向＋関数型
* 静的型付け
* オープンソース
* JetBrains が開発

Kotlin は関数型言語とオブジェクト指向の両方のパラダイムをサポートする汎用的な言語です。
Kotlin は主に JetBrains がコミュニティと共にオープンソースで開発を行っています。
Kotlin は Java と同様に静的型付け言語ですが、型を省略でき、他の動的型付け言語と同様の簡潔さの見た目になります。

# [Kotlin の理念](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.g556406b9e6_0_123)
* 簡潔
* 安全
* 相互運用可能
* ツールと相性が良い

Kotlin はコンパイラが多くの型に関するエラーを解決してくれるので安全です。
Kotlin は Java との優れた相互運用性と、豊富なツールのサーポートを備えています。

# [デザイン原則](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.g556406b9e6_0_129)
* 研究プロジェクトではない
* Java, Scala, C#, Groovy, Python, C, C++, Objective-C, Delphi, ... などから学んだ
* 実用第一主義

Kotlin は産業用の実用的な言語であり、研究プロジェクトではありません。
多くの既存の言語に基づいていて、多くの考えを再利用しようとしています。

# [Timeline](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.g556406b9e6_0_138)
* 2010 Project 開始
* 2016 Kotlin 1.0
* 2017 Android で公式サポート言語になった
* 2018 Kotlin 1.3

2010年にプロジェクトが始まり、2017年には Google が Android 開発の第一級言語として扱うようになった。
（補足：2019年には Google は Kotlin first を宣言した）

# [採用状況](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.g556406b9e6_0_147)
Kotlin の利用と Kotlin コミュニティは急速に成長をしている。

# [アプリケーションのビルド](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.g565f92c4db_0_1)
JVM、Android、JavaScript、Nativeなど、さまざまなプラットフォーム用に Kotlin コードをコンパイルできます。

# [Kotlin/JVM](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.g565f92c4db_0_6)
* JVM 1.6 以降のサポート
* 100% の Java との相互運用性
 * Java の既存のフレームワークやライブラリを使うことができる
* Java -> Kotlin のコンバーターを使うことができる

JVM 1.6 ならば、Kotlin を使用するにあたって JVM のバージョンアップは不要。
Kotlin と Java は（ファイル単位で）混在できるので、プロジェクト内の全ての Java コードを一度に Kotlin に変換する必要はありません。Kotlin コードをゆっくりプロジェクトに追加していくことができます。
IntelliJ IDEA と Android Studio は Java コードのコピー＆ペーストで自動的に Kotlin コードに変換します。学習や Kotlin 移行に便利かも知れません。

# [Kotlin/Android](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.g565f92c4db_0_11)
* 公式サポート
* Android KTX

Check out the Android KTX project which contains lots of helpful extensions for Kotlin.
Kotlin は Android 開発における公式言語となっており、多くの Android のドキュメントは Kotlin を対象としています。
Android KTX という多くの便利な Kotlin 拡張関数が含まれるプロジェクトは要チェック

# [Kotlin/JS](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.g565f92c4db_0_16)
* JavaScript に変換
* 生成された JavaScript コードは可読性が高い
* JavaScript と相互運用可能

Kotlin を使えば、JavaScript もターゲットとすることが可能です。
コンパイラは Kotlin コードから可読性の高い JavaScript コードを生成します。
Kotlin コードを JavaScript コードに変換することは、「コンパイル」ではなく、「トランスパイル」と呼ばれます。
動的型を使うことで、強い型指定なしに任意の JavaScript ライブラリを使うことが可能です。
厳密に型指定されたサードパーティのフレームワーク API にアクセスするためには、 ts2kt ツールを使用して TypeScript 定義を "Definitely Typed"型定義リポジトリから Kotlin に変換します。

# [Kotlin/Native](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.g565f92c4db_0_21)
* LLVM を使用したネイティブバイナリへのコンパイル
* Virtual Machine が不要
* ターゲット
 * iOS / Android
 * Windows, Linux, Mac
 * Small Devices
 * C, Swift, Objective-C

仮想マシンが不要だったり、使えなかったり、非常に重いプラットフォームが存在します。
Kotlin/Native はネイティブコードの世界に飛び込むのに良い選択肢です。
LLVM を使用し、多くのネイティブプラットフォームをターゲットにしています。
さらに、C と Objective-C ライブラリとの相互運用レベルも追加されています。
iOS アプリの一部に Kotlin/Native を使うことが可能です。

# [Multiplatform projects](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.g556406b9e6_0_176)

Kotlin Multiplatform を使用すると、異なったプラットフォームともコードを共有することができます。

# [Kotlin/Common](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.g565f92c4db_0_27)
* プラットフォーム間でコードの再利用
* expect と actual の宣言
* マルチプラットフォーム (MPP)
 * プロジェクト 
 * ライブラリ

Kotlin の共通コードを書いて、Kotlin/JVM, Kotlin/JS, Kotlin/Native ごとにコンパイルすることが可能です。
プラットフォーム固有部分の実装は `expect` と `actual` 宣言を使うことで、共通コードから利用することが可能です。

# [Useful Links](https://docs.google.com/presentation/d/1yUqrtNfgaP1ZGbEglcMcSJbQ2D6Tzvpph3-V6XcCx6w/edit#slide=id.g565f92c4db_0_52)