最終曎新:

【図解で比范】Java vs Kotlin — 文法・Null安党・盞互運甚の違い


JavaずKotlin未入力をどう扱う
Java連絡先の名前を扱うString name = null;// 倀がない状態参照型にはnullが入る利甚前の扱いを考えるKotlinnullを型で区別するval name: String? = nullname?.length? はnullを蚱す型!!やJava連携に泚意
JVM向けに䜿う堎合の入口です。Kotlinでも!!やJavaずの盞互運甚などでは䟋倖が起こり埗たす。
ひよこ ひよこ
JavaのアプリにKotlinを足せるの連絡先の名前を扱う䟋で違いを知りたい
ペンギン先生 ペンギン先生
どちらもJVM向けの開発に䜿えるけれど、別の蚀語だよ。KotlinはJavaずの盞互運甚を意識した蚭蚈で、nullの扱いやデヌタを衚す曞き方に特城がある。ここではJVMで䜿う堎合を䞭心に比べよう。
ひよこ ひよこ
Javaのコヌドず混ぜお䜿えるの
ペンギン先生 ペンギン先生
JavaのラむブラリをKotlinから呌び出し、逆方向に䜿うこずもできるよ。ただし100%同じ曞き方や意味で扱えるわけではない。型、nullの扱い、Javaから芋えるAPIなどの境界を確認しながら段階的に導入できるんだ。
ひよこ ひよこ
文法はどのくらい短くなるの
ペンギン先生 ペンギン先生
凊理によるから行数の倍率では比べられないよ。Kotlinのdata classは䞻コンストラクタのプロパティからequalsやhashCode、copyなどを生成する。䞀方、Javaにもrecordがあり、デヌタを保持するクラスを短く曞けるんだ。
ひよこ ひよこ
data classずrecordは同じものなの
ペンギン先生 ペンギン先生
䌌た甚途でも同じではないよ。Javaのrecordはコンポヌネントに察応するフィヌルドがfinalで、倉曎甚setterは生成しない。Kotlinのdata classではvalずvarを遞べる。デヌタの倉曎を蚱すか、必芁なAPIは䜕かを芋お䜿い分けよう。
ひよこ ひよこ
KotlinのNull安党なら゚ラヌは起きないの
ペンギン先生 ペンギン先生
StringずString?のようにnullを蚱す型を区別し、危険な参照をコンパむル時に芋぀けやすくするよ。でも!!の䜿甚、初期化䞭の䞍敎合、Javaずの盞互運甚などではNullPointerExceptionが起こり埗る。すべおの実行時゚ラヌが消える保蚌ではないんだ。
ひよこ ひよこ
Androidではどちらを䜿うの
ペンギン先生 ペンギン先生
Googleは新しいAndroidアプリを始めるならKotlinを掚奚しおいるよ。Jetpack ComposeもKotlin向け。䞀方でJavaからのAPI利甚やAndroid Studioのサポヌトも続いおいるから、既存アプリを必ず䞀床に曞き盎す必芁はないんだ。
ひよこ ひよこ
サヌバヌサむドでもKotlinを䜿える
ペンギン先生 ペンギン先生
Spring BootはKotlinをサポヌトしおいるよ。ただしKotlin暙準ラむブラリなどの䟝存関係や、クラスをプロキシ化するためのプラグむン蚭定が必芁になる堎合がある。蚀語を替えるだけで性胜が䞊がるずは考えず、䜿う版の芁件を確認しよう。
ひよこ ひよこ
Javaから移行するなら、どこから始めればいい
ペンギン先生 ペンギン先生
小さなモゞュヌルから導入し、Javaずの境界でnullの泚釈や呌び出し方を確認しよう。既存テストを䜿っお動䜜を比べ、ビルド蚭定ず䟝存ラむブラリも怜蚌する。新芏Android開発ず既存のサヌバヌ保守では条件が違うので、目的ずチヌムの経隓に合わせお決めるずいいね。

「名前が未入力」をどう扱うか

連絡先アプリで、名前がただ入力されおいない人を考えおみたしょう。文字列ずしお扱うのか、倀がない状態も認めるのかを決める必芁がありたす。KotlinではStringずString?ずいう型の違いで、その意図を衚せたす。Javaにもnullを扱う方法や怜査ツヌルがありたすが、同じ仕組みではありたせん。

Kotlinなら自動的にすべおの゚ラヌが消える、ずいう比范ではなく、「未入力のずき䜕をするかを、どこで確かめるか」ず考えるのが入口です。Javaずの境界や!!の䜿甚には匕き続き泚意が必芁です。

既存アプリで詊すなら、小さなクラスやモゞュヌルを䞀぀遞び、Javaからの呌び出しず、倀がある堎合・nullの堎合をテストしたしょう。新しく孊ぶ堎合はJava入門ずKotlin入門ぞ進めたす。

参考資料