2023.05.08
プログラミングの筋が良くなる?!『関数型プログラミングの基礎 JavaScriptを使って学ぶ』
プログラムの本質を理解する!関数型プログラミングの名著
本書はAmazonのレビューやQiita、Twitter等で数多くの技術者によって高く評価されており、名著であることは言うまでもありません。
本記事では購入を迷われている皆様が持つであろういくつかの疑問にお答えします!
目次
この本は誰に向けて書いてるの?
関数型プログラミングって何?
関数型ってなんで大事なの?
コードのモジュール性が高まる
コードのテストを容易にする
コードの正しさを証明できる
関数型の言語なんて使わないし・・・
おわりに
この本は誰に向けて書いてるの?
本書の特徴は「関数型プログラミングの本質」という概念的なテーマを、サンプルコードや比喩を用いてわかりやすく伝えようとしてくれている点です。
「関数型プログラミングの本質を知りたい!」
「わからないところは何度も読んで理解してやる!」
という方には非常に噛み応えのある本となっているのでオススメです。
プログラミングにそこまで自信が無くても、数学的な思考が好きという方であれば面白いと思ってもらえる1冊になっています。
ただし、本書は入門書ではありません!
本書の「はじめに」では、「初心者でも読める」というような記載がありますが・・・。
なにかしらのプログラミングの経験があれば誰でも読むことができます。もはやJavaScriptを触ったことがなくても大丈夫です。
※けど初心者にはちょっと難しいかもしれません。
関数型プログラミングって何?
本書では「関数型プログラミング」を理解するために、基礎の基礎まで遡って説明してくれています。
特に素晴らしい点の一つが、第1章の関数型プログラミングを説明するための章です。
第1章の目次をご覧ください。
第1章 「計算」とは
1.1 「計算」のモデル
1.2 命令型モデル
チューリング機械
命令型モデルの特徴
(コラム)アラン・チューリングと第二次世界大戦
1.3 関数型モデル
(コラム)λの由来
置換ルール
(コラム)再帰と漸化式
関数の定義
関数型モデルを使うメリット
関数型プログラミングを説明するための前準備として「「計算」とは」まで遡ります!
決して読者に暗黙の前提知識など求めません!
「チューリング機械」など、まるで情報系の大学生が学ぶような内容を持ち出している辺り、本質に迫ろうという著者の熱意がヒシヒシと伝わってきます。
関数型ってなんで大事なの?
「計算とは」に遡ってまで関数型プログラミングの本質に迫る本書ですが、そこまでして理解しようとするほど「関数型プログラミング」は重要なのでしょうか?
安心してください。それについても本書に解説があります。
本書では関数型プログラミングの利点として以下の3点を挙げています。
・コードのモジュール性が高まる
・コードのテストを容易にする
・コードの正しさを証明できる
詳細を省いてものすごく大雑把に説明します。
コードのモジュール性が高まる
これは関数型プログラミングの持つ「参照透過性※」によってもたらされているものです。 モジュール性が高いとコードの可読性が向上したり、保守性が向上したりと、その他にも良いこと尽くめで、現代の開発現場ではとてつもなく重要視されているものです。
※「参照透過性って何?」という疑問も本書で解説されています!
コードのテストを容易にする
これは先ほどのモジュール性の高さとも関係があります。
モジュール化によってコードの独立性が高まると、各モジュールの単体テストが容易になることは想像できるかと思います。
コードの正しさを証明できる
これはわかりやすく言うと「関数型プログラミングが数学的根拠に根ざしているから」というと納得感が高まるでしょうか。
数学的な性質を持つコードは、コードに対する推論を可能にします。関数型プログラミングではこの推論をもとにコードの正しさを証明できます。
関数型の言語なんて使わないし・・・
関数型の言語の代表的なものでいえば「Haskell」「LISP」「Scheme」あたりがよく挙げられます。
その他にもiOS開発言語として有名な「Swift」、Android開発言語の「Kotolin」、更には「Python」や「R」も関数型言語としてのパラダイムを持っている言語といって差支えないでしょう。
しかし読者の中には「その辺の言語もよく聞くけど実際には使ったことないし、自分には不要な本か・・・」と思った方もいるかもしれません。
ここでこの記事のタイトルを思い出してください。
プログラミングの筋が良くなる?!
そうです。私が思うこの本の最大の推しポイントは「関数型プログラミングを学ぶことで、プログラミングの筋が良くなる!」という点です。
あらゆるプログラミング言語の土台が数学であることは言うまでもないことかと思いますが、その数学に対して、純粋なアプローチをしているのが関数型プログラミングです。 関数型プログラミングの本質に迫ることは、プログラミングの本質に迫ることなのかもしれません。
おわりに
読者の皆様、初学者時代に
「どれにしよう・・・『○○基礎』ってのが初心者向けっぽくて良さそう!」
と購入した本がそのまま本棚を彩るインテリアになった経験は無いでしょうか?
私はあります。本書はまさにそのタイプの本です。
ただ本書に関しては「関数型プログラミング」の本質をわかりやすく解説している数少ない書籍で、この先何年たっても受け継がれる名著です。
是非この機会にお買い求めください。