名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。

Kotlinをちょっとやってみた

概要

ちょっとある程度、型が固まった言語をやりたくなりました。自分の中で型があって、ある程度書きやすいかつ汎用的といえば Java 含めた JVM 系かなと思いました。

そこで、JVM 系で 1 言語くらいは押さえたいなと思って、Kotlin を少し触ってみることにしました。

やったこと

学び

  • 言語的にはすごく柔軟な感じ & 割と新鮮だったかも
    • when を使った分岐
    • 関数を渡してどうにかする感じがすごい
    • デフォルトのクラスの拡張を、一部の箇所だけで拡張したりもできる(すごいなこれ)
    • 充実しすぎているので理解しきれていない箇所はあるかも
  • JDK 14 では進めないほうがいいかも
    • gradle 等ではまった(ビルドが走らない)
    • JDK 11 or 8 が無難かも…
  • 書籍に沿って進めたが、うまくいかない箇所がいくつかあった
    • Mac OS を前提としているため、Windows + WSL でうまくいかない箇所が多発
      • とりあえず JDK 11 にして、Windows 側でやって対応
      • あまりこのあたりについてのノウハウについても出てこない。記事にする需要はありそうだが、自分は一旦あきらめる。
    • Spark, Spring あたりの章からちょっと説明の雑な箇所が多い印象…
      • このあたりからコード量も増えたので、コードハイライトとかもかけてほしかった感じ
      • あとはフォルダパス周りとかも若干わかりづらかったような
    • PatchRequest 周りが解消できず、そのあたりはやるのあきらめた
      • form を普通に送ると POST 扱いになるはずなんだが、そのあたりどう解消してるんだろう
      • あと gradle bootRun が自分の手元でうまく動いていなかった感(これは自分の環境の問題な気がするが)
      • 以降のところはさらっと読み流した
  • Spring 2.X になっていくつか廃止されているものとかがあって、そのあたり書籍情報を引いてもなかったので困った
  • DB 接続周りと heroku はまあ、また今度
    • 内容見た感じでもそんなに長くなかった。パットできそうだったので、スルーした
  • どこから手を付けるべきなのかわかりづらかったので、実際によく使われているフレームワークを動かすことができたのは学びが多くてよかった

展望

  • これちょっと読んでみようかなと思った
  • あとはこの辺をチェックしてみようかと
  • 競技プログラミングとかでも気が向いたら書くかも
    • ただ初回コンパイルが若干長いように感じているので、うまく運用できればかなと思ってる
    • 個人的に C++ は… うーん…(汎用的であるが、あんまり書きやすい言語だとは思っていない)
      • じゃあ Rust 書けとか、そういう話かもしれない
      • ただまだ Rust は順序的に後かなと思ってる
        • Python 以外でも仕事ができる言語を増やしたい(TypeScript はそういう意味で、どこまでやれるのか、ある程度まともな場所で書いてみたいものだが…)
        • そうすると世間的には JVM, PHP, Ruby, go のどれかかなと思ってる
        • コンパイラ込みの型有りなら JVM 系のどれかでいいような気がしている
        • そういうのをある程度ちゃんとやれてから Rust を時間かけて学ぶとかでいいんじゃないかなと(正直、一般貧弱エンジニア感が最近あるので、ある程度自分自身の基盤を埋め手からでもいいように思えた)
  • まあ後はやってみたにしろ、記事や情報に当たることが少ないかも
    • ちょっとこれはつらいので、試したことのメモは積極的にやっていきたいところ

まとめ

前々から思ってましたが、十分に可能性を感じる言語で良いなと思いました。簡潔で分かりやすく、メソッドのデフォルト値とかキーワード引数で渡せるやつとかはすごく良いと思っています(当たり前になりつつあるような気もしますが)。

環境構築回りのノウハウがあまり出てこなかったり、3年前の書籍とはいえ、当時と環境が変わっている個所もあり、技術的な変遷が激しい状況にあるように思います。とはいえ、そういうものについていきつつ、学ぶ機会があればいいなとは思っています。

気が向いたら heroku にアップできるようなものを何か作ってみるのもいいかなと思います。言語が言語だけに、コンパイルでデータ型に対する検査ができる安心があり、少し大きめなものを作っていくのには向いていそうなので、何かそういう機会があれば使ってみるのも良さそうと思いました。