最近チームを異動して、仕事内容がサーバーサイドとなってjavaとかkotlinを書いてるので、その備忘録的なものを書いておこうかなと。マジで右も左もわからん…
(※現段階の理解を雑に書きなぐってるので、多分間違えてるところがままある)
java/kotlin
- kotlinはJava仮想マシンで動作するプログラミング言語で、コンパイルするとJavaのバイトコードに変換される
- javaは null安全じゃない。これがとてもつらい。
- kotlinはnull安全。とても快適。
- kotlinもjavaも型システムがnominal
- typescriptはstructuralでそっちに慣れてしまっているので、辛く感じることがある
- kotlinは構文がとてもエレガント
- ifが文ではなく式だし、when式もあるし、
fun foo() = result
みたいに書けるし、本当に快適
- ifが文ではなく式だし、when式もあるし、
- javaはコンパイルが(基本的に)必要な言語
- .javaファイルをコンパイルするとjavaバイトコード(.classファイル)になる
- シングルファイルであればコンパイルせずに実行できる(java11以降)
kotlinとjavaの関係はtypescriptとjavascriptの関係に似てる。kotlinはjavaにコンパイルできるし、javaより型が便利だし。
gradle
(maven は知らないので書けない)
- gradle はビルドツール
- gradle にプラグインを入れてjavaやkotlinをコンパイルする
- javaプラグインを入れると
src/main/java
以下においてあるjavaファイルたちがコンパイルされる (多分) - kotlinプラグインを入れると
src/main/kotlin
以下においてあるkotlinファイルたちがコンパイルされる (多分) - kotlinからjavaを読み込んだりもできる
- javaプラグインを入れると
./gradlew build
でビルドしたり、./gradlew bootRun
で実行したりできる- gradleの設定ファイルはgroovyかkotlin DSLで記述する
- groovyはJavaプラットフォーム上で動作する動的プログラミング言語らしい (by wiki)
- build.gradleはgroovy、build.gradle.ktsはkotlin DSL
- build-logicというものを使うとビルドロジックを共通化できる
- これがあんまわかってないんだよな…
gradle は結構フレームワークに近い動きをする。たとえば src/main/java に配置されたファイルをコンパイルする動作のあたりとか、特にフレームワークっぽいよね。
まとめ
こうして書き出してみるとそこまで複雑じゃないな。でもいざ書いてみると全然書けないんだよな……