虚無庵

徒然なるままに

こわくない関数型プログラミング勉強会@福岡 #1 に行ってきた

fp-fukuoka.connpass.com

Fukuoka.rb を二週続けて参加しておらずこのブログもめっきり更新されなくなっていた頃に、興味深い勉強会が開催されたので参加してきました。


cacoo.com

登壇されたふじたまさんは元同僚で実に約 5 年半振りに再会しました。

関数型プログラミングって何?

気になったことだけを箇条書き

  • 副作用がない関数、それが純粋関数(pure function)
  • 関数型プログラミングは Functional Programming の和訳であるが、「Functional を ”関数” と訳した」ことがイケてない
  • 純粋関数のみの組み合わせは純粋関数
  • 純粋関数のみでコーディングできれば幸せになれそう
  • でも世の中のサービスには I/O が存在するので純粋関数のみで実現するのは不可能
  • I/O の処理を最初と最後に寄せれば、比較的幸せ(≒ 純粋関数を多く使う)が大きくなりそう

アンカンファレンス

参加者でグループ分けをしていろいろ議論した。自分は「関数型プログラミングのメリット/デメリット」チームに入った。まとめるとこんな感じ。

  • メリット
    • 副作用が少ない(純粋関数を)
    • immutable が保証されている(絶対に変更されない)
    • コード量が減る(不要なデザインパターンがある)
    • 慣れれば読みやすい
  • デメリット
    • とっつきにくい
    • なんでも immutable のでメモリーをいっぱい使う
    • immutable programming のテクニックを覚えなければならない
    • 理解が得られないと辛い

参加した感想

久々にふじたまさんに会えたこともさることながら、「関数型プログラミングへの拒絶感」は薄まった気がする。
また、自分が Ruby コミュニティーに属しているせいもあるが昨今話題になった pipeline operator も関数型プログラミングをもっと知ればすんなり受け入れられたのかもしれない(Elixir から影響を受けていると思われるので当たらずとも遠からずだと思っている)。

そして「Ruby関数型プログラミングするには〜」とかを考えていたが…。

qiita.com

6 年も前に通過した人がいるようで「あぁ、やっぱりな…」という気持ちになった。

Ruby だとメモリーをいっぱい使ってすぐメモリー不足になりそうだなぁ」と思っているが、それを凌駕するメリットがあるらしい。それは「関数型言語を使わないと恩恵が得られないのか?」という疑問を抱いたが、その場では質問せず。オブジェクト指向言語関数型プログラミングは出来るんだろうけど、どちらも思想が違うから無理に実現する必要もないだろう。というのが今のところの感想。

ふじたまさんは jQuery と TypeScript と Jest を使ってライブコーディングをしながらプレゼンしていて「相変わらずすげーなぁー」と思った。

次回

8 月か 9 月辺りにやりたいよね、と言っていた。面白かったので継続していって欲しい。