てすと

たかろぐ

自分のログを刻みます。

関数型の理解に対する現状メモ

今日は雨が降ったり風が吹いたり、少し寒い日でしたね。

そんな今日は研究デーでした。成果出さないと殺されるゥ...(笑)

関数型を意識して書き出してから、まだまだ日は浅くてちゃんと使いこなせていない感はすごいんですけど、 最近は「あれ、関数型めっちゃイイんじゃね?」ってなってきました。

なので、ここらで一旦現状の理解をまとめておこうと思いました。 ただ、あくまで、「現時点では僕はこう思っている」程度に留めていただけると幸いです。 そして、間違っていたらご教授ください(笑)

関数型ってなんぞや

関数型とは、プログラミングパラダイムの一つです。 この中だと、よく知られているのはオブジェクト指向とか、手続き型辺りでしょうか?

以下に、関数型の参考記事を挙げておきます。

とりあえず、特徴だけ列挙しておきます。

  • 不変性(イミュータブル)
  • 副作用が無い
  • 関数は第一級(値として使える)

僕が思う関数型の良いところ

まず、よく知られているオブジェクト指向について少し。 オブジェクト指向型は、メンバ変数を隠蔽して、メソッドを通してシンプルな見た目を提供することが美徳だと思います。 「とりあえず命令は与えるから、後は上手くやっといてくれ。」みたいな。

でも、そのオブジェクト指向の美徳、僕は一長一短だと最近は思っています。

確かに、細かいことを気にしなくて良いインターフェースが与えられているのは良いことだと思います。

でも一方で、明確に処理の流れを理解するのは結構骨が折れるのではないかなと思っています。 不変的でなく、副作用もある状態だと、いつどこで値が書き換わるかが分かりづらいので、 「この変数、どこで書き換わったんだぁ!?」と書き換わった原因探しに時間を費やすことが多くなります。

そして、その辺りは関数型を導入すると改善されるんじゃないかなと最近は思っています。 また、関数型を導入することによって、コード量が結構減りました。 全体として可読性も上がって、保守性が上がったような気がしています。

以上関数型の良いところです。根拠を示していないので、かなり説得力に欠けた内容&不十分な感じはしていますが、眠いので許してください(笑)

最後に

今回は、関数型について僕の理解をまとめる記事になりました。

本当は、関数型にクラスを導入させてみたことについてまとめたかったんですけど、まとめきれませんでした。(スヤァしたい)

とりあえず、研究については速攻で実験スクリプト組んで、来週にはバンバン稼働させて成果出していくぞい