Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

javaだとかgradleだとか

最近チームを異動して、仕事内容がサーバーサイドとなってjavaとかkotlinを書いてるので、その備忘録的なものを書いておこうかなと。マジで右も左もわからん…

(※現段階の理解を雑に書きなぐってるので、多分間違えてるところがままある)

java/kotlin

  • kotlinはJava仮想マシンで動作するプログラミング言語で、コンパイルするとJavaのバイトコードに変換される
  • javaは null安全じゃない。これがとてもつらい。
  • kotlinはnull安全。とても快適。
  • kotlinもjavaも型システムがnominal
    • typescriptはstructuralでそっちに慣れてしまっているので、辛く感じることがある
  • kotlinは構文がとてもエレガント
    • ifが文ではなく式だし、when式もあるし、fun foo() = result みたいに書けるし、本当に快適
  • 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を読み込んだりもできる
  • ./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 に配置されたファイルをコンパイルする動作のあたりとか、特にフレームワークっぽいよね。

まとめ

こうして書き出してみるとそこまで複雑じゃないな。でもいざ書いてみると全然書けないんだよな……