読者です 読者をやめる 読者になる 読者になる

Scala関数型デザイン&プログラミング 〜1章

感想

概要

を読んだメモをまとめてゆきます。

各章のメモ

本書に寄せて / まえがき

Odersky先生の寄せ書き、まえがきなどではこの本の目的について述べられています。

  • Scalaを純粋関数型プログラミング言語として扱う方法
    • 美しいコードや計算の本質を見抜く力につながる
  • Scalaについての本ではなく、関数型プログラミングの入門書
  • プログラミングをある程度把握している人が対象
  • 今までのことは忘れ、初心に立ち返る必要がある
  • 関数型プログラミングが「今までやってきたことじゃないか」と思ったらサイコー
    • 責任を分離したり、イミュータブルにしたり

徐々に抽象度を上げていく構成となっているようです。
練習問題も用意されていてgithubにも上がっているので見てね、とのことです。

思ったこと

関数型プログラミングが「今までやってきたこと」と思えると良い、というのはナルホドと思いました。
「関数型でなくても使える普遍的な考え方が、関数型であればより表しやすい」と言うのは実にシンプルです。

1章

1章では、関数型プログラミングの概要について触れています。
もちろん、純粋な関数型を前提としています。

コーヒーをクレジットカードで買う例を出し、副作用のあるプログラムを書き換えていくことで関数型の利点を明らかにしています。
ここで述べられている利点は以下の通りです。

  • 副作用が無い
    • テストしやすい
    • 気づいたらモジュール性が上がっている

関数型のルールに従うことにより、プログラムの構成が変わり、良いコードが出来上がっているとの主張です。
制約と誓約、要は念能力ですね。

続いて、純粋関数の詳細な説明が入ります。

  • 入力と出力が1:1対応する
  • 参照透明(式を常にその結果に置き換えることができる)

これにより、関心ごとに関数を分離しやすく、結果的にモジュール性が高いプログラムになりやすいです。

思ったこと

プログラミングにおいて制約は極めて重要です。
いかに制約をつけるかで様々な手法が生まれてきました。
例えばPythonのインデントであり、契約プログラミングであり、静的型付けであり、全てがオブジェクトである言語であるわけです。

制約と自由さ、このバランスをいかに取るかで言語設計者は頭を悩ませているかと思います。
そのうちの1つの提案が純粋関数型言語であり、副作用を制限するというかなり厳しい制約を背負っています。
それゆえ同じ動作をするプログラムでも様々な違いが出てきます。
利点と欠点を見極めて、上手く使いこなせるようにしたいものです。