tech

プログラム言語とその周辺の個人的見解

はじめに断っておきますが、これはあくまでも 個人的見解 で、特定の技術をdisったりすることは本意ではありません(自分には合わないというだけのことです)。

Kotlin

いま、一番、書いてて楽しいのはKotlinですね。

基本的にはオブジェクト指向言語で、そこにクロージャを扱いやすい形で導入して、自分の意図をコードに落とし込み易くなっています。Ruby発Groovy経由で最後のクロージャをメソッド呼び出しの括弧の後に記述できるというのが良いです。SAM(Single Abstract Method)の省略記法も同様に、使ってて快適です。

これによって、DSLを作るのが容易という利点を引き出せます。「俺々フレームワーク上等!」というスタンスです。

その他には、スコープ関数が好みです。

  • コンストラクタだけでは処理できない初期化処理を「.apply{}」でくくる
  • nullable回避に「?.let{}」で囲む
  • 例えばAPIのレスポンスを返したいけど、キャッシュにも設定しておくなどの処理がある場合は、「.also{}」に詰め込む

いろいろと自分の意図を表現するために、処理を分割して記述できるのは良いです。

Rust

一番、面白いと思える言語はRustですね。

所有権システムとライフタイムで安全なアプリを記述できるというのは、よく言われますが、これらは、設計にも影響を与えることは、あまり語られません。

所有権を借用させたりするわけですが、その際、明示的にライフタイムを指定させられることがあります。そうなると、本来、そのデータは誰が所有すべきかを考えさせられます。ライフタイムを適切に調整しなければなりませんので。

その他に強力なのは、それぞれ個別にデータを割り当てられるenumです。OptionのResultもこのenumの産物です。網羅性を要求するパターンマッチと相まって、安全で、読みやすい処理を記述できます。

Java

怒濤のバージョンアップとアノテーション・ライブラリで、Kotlinで出来ることのほとんどが出来るようになってきましたが、JetBrainsがKotlinを作った動機の一つ、

  • これ以上、過去のしがらみを引きずったJavaを拡張していくのは無理

を体現していると思います。

また、最近の流れでは、不変性が重視されていますが、Javaではfinalを冠した特別なものとしてしか、指定できません。 特別なものを普通に使うというのは普通ではないので、Javaで不変オブジェクトを作るのは、苦痛を伴います。

Dart

Flutterの存在が全てですね(個人的見解です)。

Flutterのためにやろうやろうと思いつつも、業務でも無い限り、自分から使いたいと思えません。

Ruby

Rubyは、ver.1.4位から使っていますが、Railsはあまり好みではありません。

Rubyの魅力は、標準的なクラスが機能豊富で大抵のことをこなせる所ですね。使い捨てのプログラムを書くのには最適です。実際、PaizaのスキルチェックではRubyを使っています(ちなみに言うと Sランク です)。

逆に言えば、Rubyでガチガチのシステムを作ることは、ほぼ不可能と思います(この辺は 別記事 で紹介します)。

Python

近代的な、BASIC+FORTRANですね。非エキスパート・プログラマの道具という感じで、それ以上でも、それ以下でもないと思います。

オブジェクト指向を後付けしたものの、オブジェクト指向言語と言えるほどでは無く、その中途半端さがいかにも非エキスパート用と感じます。

PHP

論外です。死んだおばあちゃんが「PHPに近寄っちゃいけない」と言っていました。

実際、サーバ・サイドのヘルプで使うこともあったのですが、「これでまともに動くと何故思えるの」という驚きの連続でした。

多くのホスティング・サービスで提供されていたという何の合理性もない理由で普及してしまい、そのため玉石混淆(ほとんど石)な多くに開発者を生み出してしまった罪深い言語だと思います。

個人的経験則(n=2)では、PHPerでVIMerなCTOは地雷です。

まとめ

  • Kotlinで全部やりたい(Flutterもbare metalも)。
  • Rustは面白いし、思考方法に良い影響を与えるので、使ってみた方がいい。
  • あとはお好きなように。