データ指向プログラミングを読んだ。

本書では、データ指向プログラミングと名付けられた、イミュータブルかつ汎用的なデータ構造で表現されたデータと 参照透過かつジェネリックな関数を使ったプログラミング方法を紹介している。

イミュータブルなデータと参照透過なメソッドを使ったプログラミングは普段から実践しており、 それらを使って柔軟なシステムを構築する方法を紹介している本書にはとても興味があった。 が、内容としてはかなりがっかりした。

本書では、データを表現するためにクラスではなくマップを使うことを前提において話が進んでいく。 つまり

data class Hoge(fuga: Int, piyo: String)

val hoge = Hoge(0, "")

val hoge = mapOf(
    "fuga" to 0,
    "piyo" to "",
)

で書こうという内容だった。 この方法は確かに柔軟になるかもしれないが、静的型付けによる安全性を完全に無視しており、かなりがっかりした。

書籍内でもこのことについて触れられていて、以下のように紹介されていた。

OOP DOP
安全性 高い 低い
柔軟性 低い 高い
汎用性 低い 高い

これは各要素を"高い"、“低い"のboolで表現しているDOPが良さそうに見えるだけで、 点数を付けるとDOPの安全性が-5000億くらいでトータだとOOPの方が良さそうだなと感じた (また、表では触れられていないが、フィールドアクセス時に保管が効かないので、コーディング中のストレスがとんでもないことになりそう)。

その他の感想:

+ JSON Schema便利そう
+ データの(デ)シリアライズが簡単なので、REPLが使いやすいのは良い
+ 汎用的な関数を作るという考え方は良さそう

- 複雑なJSON Schemaを書こうとすると辛そう。OOPならSpecificationパターンとか使える
- 色んなところでJSON Schema Validationが挟まりそう
- ポリモーフィズムで、実装忘れを静的に検知できないのが辛い

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

データ指向プログラミング [ Yehonathan Sharvit ]
価格:3,960円(税込、送料無料) (2023/7/1時点)