Kotolin

オイオイKotlin良いなオイ。 普通にjar捌けるしjava資産ふつーに呼べる。

言語的にはNimみたいな独特みがある。例えばcompanion object(これはスタティック変数・関数を持てるオブジェクトなのですが)とか、キーワードが妙な独特みがあるものの、Goのようなシンプルさが好き。

関数のアクセスのデフォルトがpublicで継承はfinalと言う仕様は最近のモダン言語と傾向が違うので独特みを増してますが、それより記述が取り敢えず楽なのは素晴らしいね。リストなどの基本コレクション型のAPIがLinqに近くて、streamAPIより全然良さそうな気がします。

ビルドだけは、ちょい時間がかかるのが難点だねえ。

Javaはつまらない言語だと思うのは間違いないのだが(笑)、まあそんな苦行をしてきた人がKotlinに愛着持てるの分かる。これは楽しい方のタイプの言語だと思うね。

なぜちょっと興味を持ったかと言えば、GitnuroというソフトがCompose Multiplatformを使って作ってた為。へえ、そんなことできるんだーと思った。

結果的にあまり使えないかなあ、と思ってこのアプリ自体は使ってないんですが(個人的にはAvalonia製の勝利)、そこそこサクサク動いたので興味が出た。

Javaの個人的微妙ポイント

個人的には少なくともJava9~からはどんどんモダン化してる仕様の印象があり、あまり悪いものはないかなと思います。Java8はちょい不便かもですね。ま、これは.NET Frameworkも似たようなもんでしょう。

とりあえず思う所として、1つの批判として「標準ライブラリの関数の命名が長い」というものがありますが、私は別に良いかなと思います。 が、どっちかというと「欲しい機能が欲しいオブジェクトにない」「期待する機能でない」みたいなのは気になりますね。あと、命名の好き好みがちょっとタイプではないかも(笑)
Javaって必然的に規約の強要が多いので、それをみんなオブジェクト指向って言ってるんだと思いました。この言語に触れて設計厨の気持ちが分かった。必然的にそういうのに意識が行く方になる。で、そのオブジェクト志向の権化みたいな言語なのに、微妙ポイント。

例えば以下が期待通りにならない実装になってるのはどうかなとは、、。

Paths.get("../hoge.md").toFile().getAbsolutePath();

これ、恐らく他の言語なら大抵期待通りに機能します。つまり親元の絶対パスを正しく取ってくる。ところがそうならないのね。以下のようにすると期待通りになります。

Paths.get("../hoge.md").toFile().getCanonicalPath()

これの何が悪いかと言うと、.toFile()した時点で例えば.exists()とか持ってこれないんですね。更に.getAbsolutePath()が呼ばれた時点で、誤ったパス文字列が返されることになります。これは直感的ではないと思いますし、冗長になる可能性が高いです。

そしてFileオブジェクトに、例えばgetExtension()みたいなのがない。.NETならFileInfoとか、PythonならPathとか、Nodeならpathがあるんだけど、Javaのstdのjava.nio.file.Pathsとかってオブジェクト変換系は充実してる割に、それぞれにイマイチ欲しいものがない。 結果的にguavaapache commonsgetFileExtensionみたいなのがあるのって、どうなんだろうって思ったかな。

IntelliJ IDEA

オイオイIntelliJ IDEA良いなオイ。 Eclipseは意図的に慣れようと触っているのですが、IntelliJ IDEAって今の時代商用問わずコミュニティ版が無料ライセンスになってるんですよね。まあJava + Kotlin特化用になっちゃいますが。

  • シンタックスハイライトの色使いがそもそも良い
  • Javaに限らずxmlやgradleのハイライトの効き方がデフォで良い(特にxmlが見やすいのは大きい。リソースとかどうせそのうち学んでいくと使いまくるから)
  • フォーマットオンセーブがどのファイルタイプでも効く
  • インテリセンスのホバーが見やすい
  • 未使用インポートの一括削除とかが楽

このあたり、初歩的なユースケースだけなのにデカいなあ。

昔Pycharmとか仮で触らされた時に、インテリセンスとかのデフォ設定がセンス良いなあとは思ったもののVS, VSCodeベースで使ってましたが、JetBrains製はサクサクさが今ひとつ足りないのが気にかかっていました。

いまこんな軽くなってるんだな。しかもUIが滅茶苦茶良い。

まず根本的にEclipseと比べてデフォの設定が良い。UIは圧倒的に良い。VSCode風に左右にアイコンパネルが展開される作りなのが好き。そして仕方なく色々な設定をしないでも使える所は使える。見やすい。素晴らしい。

正直まだ「真の使い方を理解してないから」なのがあると思うんですが、Eclipseって最低限絶対必要に感じたプラグインは幾つかあるんですが、Sprint Boot PluginとかEGitみたいな専門系プラグインは何が良いのかまだサッパリ分かってないんですよね。

特に後者はパット見使いづらすぎて、普通のクライアントとターミナルでええやんってなった。それならVSCode的なエディタとデバッグ機能にだけシンプルに特化して、ガリガリターミナル叩ける方が得じゃない、って思って、今んトコIntelliJに圧倒的優位性を感じてる。

いやー、これ「MSじゃないしな」とか思ってたけど、Riderに実際ちょっと興味持っちゃったね。ここまで良いと。今んトコ、そこにサブスクする気ないんだけどな。つよつよになってJetBrainsを生産性のためにサブスクしてます(キリッ)ってしてみてーなあw

んー、Java・Kotlinでハッピーコーディングするならこっち普通に使いたいかなと感じた。選べるなら、絶対にIntelliJを私は取りますねえ。意図的にEclipseは今後も触っていきますが。

terraform

触った。と言ってもDockerで簡単なチュートリアルやってみただけ。 なるほどねえ。宣言的ファイルを使って操作してくって感じかな。

gradleもそうなんだけど、こういったDSLに慣れてないものの、例えばresourceってものがスタティックに捉えるというより、一種の関数(=何かをする)みたいに捉えていった方が良いんじゃないかとは感じた。こういったクロージャ的な記法はちょっと慣れてないです。

val f = Foo {
    var test = 1
    println(test)
}

気持ち、頭での変換が必要です。この意識をもっと自然に持ってこれると良いなあ。ちょっと頭が回りにくい。

const f = Foo(() => {
      let test = 1;
      console.log(test);
});

EC2とかのチュートリアルもやりたいかなあとは思うけれど、金かけるの嫌なんだよねえ。クラウド嫌ってるのがそういうところ(笑)

全体的にはどうも触ってみたら、モダン傾向に一気に気が触れてしまった感がありますね。 恐らく個人開発するならMavenよりgradle + kotlin DSLの方を使う風向きが一気に生まれてしまったような気がするなあ。