Kotlin

Kotlinとは

Kotlin は JetBrains が開発した静的型付け言語で、[[Java]] と同じ JVM 上で動きます。2019年に Google が Android アプリ開発の推奨言語に定め、現在の Android 開発では標準的な選択肢です。

fun main() {
    val message = "Hello, Kotlin"
    println(message)
}

Java のクラスライブラリをそのまま呼べるため、既存の Java 資産を捨てずに移行できます。同じプロジェクト内で Java と Kotlin のファイルが混在しても動きます。

Javaと比べて何が変わるか

観点JavaKotlin
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] 待機中はスレッドを手放し、同期処理と同じ見た目で書ける
- [ ] 非同期処理をコールバックの入れ子で表現する
解説: コルーチンは中断・再開できる関数として非同期処理を表し、待機中にスレッドを占有しません。