Java との比較
Kotlin で解決された Java のいくつかの問題
Kotlin は、Java が抱える一連の問題を解決しています。
- Null 参照は型システムによって制御されています。
- 生型 (Raw types) が存在しません。
- Kotlin の配列は非変 (Invariant) です。
- Kotlin には、Java の SAM 変換とは対照的に、適切な関数型 (Function types) があります。
- ワイルドカードを使用しない使用場所変異 (Use-site variance)。
- Kotlin にはチェックされる例外 (Exceptions) がありません。
- 読み取り専用コレクションと可変コレクションのための独立したインターフェースがあります。
Kotlin にはなく Java にあるもの
- チェック例外 (Checked exceptions)
- クラスではないプリミティブ型 (Primitive types)。バイトコードでは可能な限りプリミティブが使用されますが、明示的に利用することはできません。
- static メンバーは、コンパニオンオブジェクト (Companion objects)、トップレベル関数、拡張関数、または @JvmStatic に置き換えられます。
- ワイルドカード型 (Wildcard-types) は、宣言場所変異 (Declaration-site variance) と型プロジェクション (Type projections) に置き換えられます。
- 三項演算子
a ? b : cは、if 式に置き換えられます。 - レコード (Records)
- package-private 可視性修飾子 (Visibility modifier)
Kotlin にはパターンマッチングはありませんが、Kotlin のスマートキャストは、Java のパターンマッチングと同様の機能を提供します。
詳細は、JetBrains による Kotlin 公式チャンネルのこの動画でご確認ください。
Java にはなく Kotlin にあるもの
- ラムダ式 (Lambda expressions) + インライン関数 (Inline functions) = 高パフォーマンスなカスタム制御構造
- 拡張関数 (Extension functions)
- Null 安全 (Null-safety)
- 文字列テンプレート (String templates)
- プロパティ (Properties)
- プライマリコンストラクタ (Primary constructors)
- 第一級デリゲーション (First-class delegation)
- 変数およびプロパティの型の型推論 (Java 10: ローカル変数型推論 (Local-Variable Type Inference))
- シングルトン (Singletons)
- 宣言場所変異 (Declaration-site variance) と型プロジェクション (Type projections)
- 範囲式 (Range expressions)
- 演算子オーバーロード (Operator overloading)
- コンパニオンオブジェクト (Companion objects)
- データクラス (Data classes)
- コルーチン (Coroutines)
- トップレベル関数 (Top-level functions)
- デフォルト値を持つ引数 (Parameters with default values)
- 名前付き引数 (Named parameters)
- 中置関数 (Infix functions)
- expect および actual 宣言
- Explicit API モード および API サーフェスのより優れた制御
Java にはスマートキャストはありませんが、パターンマッチングが Kotlin のスマートキャストと同様の機能を提供します。
詳細は、JetBrains による Kotlin 公式チャンネルのこの動画でご確認ください。
次のステップ
以下の方法について学びましょう:
