Javaとの比較
Kotlinで解決されたJavaのいくつかの問題
Kotlinは、Javaが抱える一連の問題を解決します。
- null参照が型システムによって制御される。
- 生(raw)の型がない
- Kotlinの配列は不変である。
- Kotlinは、JavaのSAM変換とは対照的に、適切な関数型を持つ。
- ワイルドカードなしの利用サイト共変性/反変性(use-site variance)
- Kotlinにはチェック済み例外がない。
- 読み取り専用とミュータブルなコレクションのインターフェースが分離されている。
JavaにはあってKotlinにはないもの
- チェック済み例外
- プリミティブ型はクラスではない。バイトコードは可能な限りプリミティブ型を使用するが、明示的に利用可能ではない。
- 静的メンバーは、コンパニオンオブジェクト、トップレベル関数、拡張関数、または@JvmStaticに置き換えられる。
- ワイルドカード型は、宣言サイト共変性/反変性(declaration-site variance)および型プロジェクション(type projections)に置き換えられる。
- 三項演算子
a ? b : c
はif式に置き換えられる。 - レコード(Records)
- パターンマッチング
- パッケージプライベートな可視性修飾子
KotlinにはあってJavaにはないもの
- ラムダ式 + インライン関数 = パフォーマンスの高いカスタム制御構造
- 拡張関数
- null安全性
- スマートキャスト(Java 16: instanceofのパターンマッチング)
- 文字列テンプレート(Java 21: 文字列テンプレート (プレビュー))
- プロパティ
- プライマリコンストラクタ
- ファーストクラスデリゲーション
- 変数とプロパティの型の型推論(Java 10: ローカル変数型推論)
- シングルトン
- 宣言サイト共変性/反変性 & 型プロジェクション
- 範囲式
- 演算子オーバーロード
- コンパニオンオブジェクト
- データクラス
- コルーチン
- トップレベル関数
- デフォルト引数
- 名前付き引数
- 中置関数
- expect/actual宣言
- 明示的なAPIモードとAPIサーフェスのより良い制御
次は何を学ぶ?
次の方法を学びましょう: