Kotlin
Kotlinとは
Kotlin は JetBrains が開発した静的型付け言語で、[[Java]] と同じ JVM 上で動きます。2019年に Google が Android アプリ開発の推奨言語に定め、現在の Android 開発では標準的な選択肢です。
fun main() {
val message = "Hello, Kotlin"
println(message)
}
Java のクラスライブラリをそのまま呼べるため、既存の Java 資産を捨てずに移行できます。同じプロジェクト内で Java と Kotlin のファイルが混在しても動きます。
Javaと比べて何が変わるか
| 観点 | Java | Kotlin |
|---|---|---|
| null の扱い | 参照はすべて null になりうる | 型で区別する(String と String?) |
| 定型コード | getter/setter を書く | data class が自動生成する |
| 変数宣言 | 型を明示する | 型推論で val / var |
| 非同期処理 | スレッドや Future を組む | コルーチンで逐次的に書ける |
最も効くのが null 安全です。null になりうる値は型の末尾に ? を付けて表し、そのままでは呼び出せません。実行時の NullPointerException を、コンパイル時のエラーへ前倒しできます。
val name: String? = findName()
println(name?.length ?: 0) // null なら 0 を使う
コルーチンによる非同期処理
Kotlin の [[並行処理と非同期]] はコルーチンで書きます。スレッドを直接扱わず、中断・再開できる関数として非同期処理を表現する仕組みです。
suspend fun loadUser(id: String): User {
val profile = api.fetchProfile(id) // 待つ間スレッドを手放す
return profile.toUser()
}
見た目は上から下へ流れる同期処理と同じですが、待機中はスレッドを占有しません。コールバックの入れ子にならずに書けるため、通信を伴う画面処理が読みやすくなります。
クロスプラットフォーム構成での役割
[[Dart]] と Flutter でアプリを作る場合でも、Android 固有の機能(通知・センサー・端末設定など)に触るには Android 側のコードが必要です。この層を書くのが Kotlin で、iOS 側の [[Swift]] と対になります。
Kotlin 自体にも複数プラットフォーム向けにコードを共有する仕組み(Kotlin Multiplatform)がありますが、まずは Android ネイティブ層の言語として押さえるのが実務での入口です。
初学者向けポイント
- 開発環境は Android Studio が標準で、Java からの変換機能も付いています
val(再代入不可)を既定にし、必要なときだけvarを使うと事故が減ります- Java を知っていれば学習コストは低く、逆に Kotlin から入っても Java のライブラリ資料がそのまま読めます
関連技術とのつながり
- [[Java]] — 同じ JVM 上で動き、ライブラリを相互に呼べる
- [[並行処理と非同期]] — コルーチンは非同期処理を逐次的な見た目で書く仕組み
- [[Dart]] — Flutter アプリでは共通層を Dart、Android 固有層を Kotlin が担う
- [[Swift]] — iOS 側の対になる言語。null 安全など設計思想にも共通点が多い
Q: KotlinがAndroid開発で選ばれる理由として正しいものはどれ?
- [x] JVM上で動きJavaの資産をそのまま使えるうえ、Googleが推奨言語に定めている
- [ ] Androidでしか動かない専用言語だから
- [ ] Javaより実行速度が10倍速いから
解説: Kotlin は JVM 言語で Java のライブラリを直接呼べます。2019年に Google が Android の推奨言語としました。
Q: Kotlinのnull安全で `String?` が意味するものはどれ?
- [ ] 文字列を必ず持つ型
- [x] nullになりうる文字列型
- [ ] 文字列を数値へ変換する型
解説: 末尾の `?` は null になりうることを型で表します。そのままでは呼び出せず、コンパイラが安全な扱いを強制します。
Q: Kotlinのコルーチンの特徴はどれ?
- [ ] スレッドを必ず1つ占有し続ける
- [x] 待機中はスレッドを手放し、同期処理と同じ見た目で書ける
- [ ] 非同期処理をコールバックの入れ子で表現する
解説: コルーチンは中断・再開できる関数として非同期処理を表し、待機中にスレッドを占有しません。