哺乳類を実装する ~Cats入門~ #Day0(はじめに)

2018-11-20

Day0

0. はじめに

Catsというライブラリをご存じだろうか?

CatasはScalaで関数型言語の文法をより書きやすくするためのライブラリであり、
関数型の文法は多様性があり副作用の少ないプログラムを書く上では習得すべき知識である.

これはオブジェクト指向脳で固まったScala歴6年の輩がCats入門のために必要な知識をまとめた資料である.

Scalaとの出会いから今まで

Scalaとの出会いは忘れもしない大学3年の前期、評判の悪いU教授が教鞭とをる「プログラミング言語入門」であった.

アルバイトでプログラマー(PHP)をしていたのでこの授業は楽勝と考えていたが
ふたを開けてみると抽象度の高い話が多く、授業はオブジェクト指向 → 関数型言語 → 論理型言語の順番で話が展開されていった

「なんだこの言語は?」

初めて見るScalaの文法はこれまでにない見たことのないもで
高階関数やmap/flatMap/foldRight、再起関数など全く理解できななかった.

「プログラムは料理みたいに手続きで書いていけばいいんじゃないの?」

そう考えていた自分には関数型言語の文法は到底受け入れられるものではなかった.

単位を落とすわけにいかないのでしぶしぶ勉強を開始、だが全く概念が理解できなかった.

しかし、妥協することは性格が許さずほかの強化の勉強も忘れただひたすらScalaと向き合った.
そしてやっとScalaの片鱗に触れることができ、最終的にはA+の評価を受けた.

それからというもの、ほとんどのコードはScalaで書いた.

某有名外資系企業のインターンでの面接のときプログラムに対する課題が出て(確か8bitの文字コードを判別する問題)を再起関数で解き、そのことが評価され採用された.

最近ではSparkのコードも難なく書いている.

ただ、最近自分は本当はScalaを正しく書けていないのではないかとの疑念が出てきた.

オブジェクト指向からScalaに入ったためオブジェクト指向的な書き方から抜け出せず
implicitの存在意義すらわからなかった.

そんなあるとき、QiitaでCatsなるライブラリの話を見つけ是非試してみたいと思った(ネコ好き).

しかし、最新の日本語の資料があまりにも少ないためこのようにまとめてみた次第である.

基本的に自分のメモ用だが、可能な限り多くの方にScalaと関数型言語(そしてCats)のすばらしさを伝えていきたいと思う.

編集後記

タイトルの哺乳類を実装するは円城 塔の「リスを実装する」からとった.

本の内容はあまり覚えていないが、すごい読みにくかった記憶がある.

関数型の多様性はオブジェクト指向の比ではない.

その意味で哺乳類とした.

Cats, ScalaCats, Scala

Posted by RV