JavaScript勉強会

JavaScriptの学習日記

関数型プログラミングの基礎 JavaScriptを使って学ぶ 【目次】

JavaScriptの学習で面白そうな本がありました!

関数型プログラミングの基礎 JavaScriptを使って学ぶ」という本です。

この本を参考にして関数型プログラミングのやり方に親しんでみたいと思います。

 

関数型プログラミングの基礎 JavaScriptを使って学ぶ

関数型プログラミングの基礎 JavaScriptを使って学ぶ

 

 

 

目次

はじめに

第Ⅰ部 関数型プログラミングの基礎

 第1章 「計算」とは

  1.1 「計算」のモデル
  1.2 命令型モデル
   ■ チューリング機械
   ■ 命令型モデルの特徴
   Column アラン・チューリング第二次世界大戦
  1.3 関数型モデル
   Column λの由来
   ■ 置換ルール
   Column 再帰と漸化式
   ■ 関数の定義
   ■ 関数型モデルを使うメリット

 第2章 なぜ関数型プログラミングが重要か

  2.1 プログラミング言語における関数の特徴
  2.2 関数型プログラミングの特徴
   ■ ファーストクラスオブジェクトとしての関数
   ■ 参照透過性
   Column コンテキストとは何か
   Column お金と参照透過性
  2.3 関数型プログラミングの利点
   ■ 高いモジュール性
   Column 「困難を分割せよ」
   ■ テストが容易である
   ■ コードの正しさを証明できる

 

第Ⅱ部 JavaScriptによる関数型プログラミングの実践

 第3章 心の準備

  3.1 DRY原則
  3.2 抽象化への指向
  3.3 セマンティクスを意識する
  3.4 テストに親しむ
   ■ 単体テストの仕組み
   ■ テストの意義
   Column 学習ツールとしての単体テスト
  3.5 JavaScript関数型プログラミング

 第4章 データの種類と特徴

  4.1 型とは何か
   Column 型の誕生と発展
  4.2 基本型
  4.3 合成型
   ■ オブジェクト型
   ■ 配列型
   ■ 関数型
   ■ 抽象データ型
   ■ 合成型の可変性
  4.4 変数とデータの関係
   ■ 不変なデータの仕組み
   ■ 可変なデータの仕組み
   ■ 代入と仕組みの効果
  4.5 参照透過性の仕組み

 第5章 プログラムをコントロールする仕組み

  5.1 条件分岐の種類と特徴
   ■ 条件分岐としてのif文
   ■ 条件分岐としてのswitch文
  5.2 反復処理の種類と特徴
  5.3 再帰による反復処理
   ■ 再帰呼び出しの条件
   ■ 再帰処理の利点

 第6章 関数を利用する

  6.1 関数の基本
   ■ 関数を定義する
   ■ 関数を適用する
   Column Node.jsにおけるStream型
  6.2 関数と参照透過性
   ■ 関数の純粋性
   ■ 副作用への対処

 第7章 高階関数を活用する

  7.1 高階関数とは何か
  7.2 カリー化で関数を返す
   Column チャーチ数
  7.3 コンビネータで関数を組み合わせる
   ■ コンビネータの作り方
   ■ 関数を合成する
   Column Yコンビネータ
  7.4 クロージャーを使う
   ■ クロージャーの仕組み
   ■ クロージャーで状態をカプセル化する
   Column ECMAScript2015(ES6)におけるジェネレータ
   ■ クロージャーの純粋性
  7.5 関数を渡す
   ■ コールバック関数で処理をモジュール化する
   ■ 畳み込み関数に関数を渡す
   Column 配列の畳み込み関数
   ■ 非同期処理にコールバック関数を渡す
   ■ 継続で未来を渡す
  7.6 モナドを作る
   ■ モナドの基本
   ■ 恒等モナド
   ■ Maybeモナドエラーを処理する
   ■ IOモナドで副作用を閉じ込める

 第8章 関数型言語を作る

  8.1 プログラミング言語の仕組み
  8.2 抽象構文木を作る
  8.3 環境を作る
  8.4 評価器を作る
   ■ 恒等モナドによる評価器
   ■ ログ出力評価器

 

第Ⅲ部 付録

 第9章 JavaScript環境を準備する

  9.1 実行環境を準備する
   Column ECMAScript2015
   ■ WindowsにNode.jsをインストールする
   ■ Mac OSもしくはLinuxにNode.jsをインストールする
   ■ 対話的コンソールを使う
  9.2 テスト環境を準備する
   ■ GitHubリポジトリをクローンする
   ■ Mochaテストフレームワークを使う

 

あとがき

参考文献

索引

 

出版社情報

サンプルコードのダウンロード、正誤表など

関数型プログラミングの基礎 JavaScriptを使って学ぶ - リックテレコム 書籍情報

 

著者紹介

立川 察理 (たつかわ あきみち)

東京大学法学部、長崎大学医学部卒業。精神科医

学生時代より趣味で始めたプログラミングを、20 年以上にわたって続けている。

2011年から2014年まで、東京大学医学部医療情報学教室にて多施設共同型電子カルテシステムの研究開発に従事。

その後プログラミングへの愛着を抑えることができず、医師としての業務のかたわら、関数型プログラミングの書籍を執筆するに至った。現在は仙台市在住。

趣味は、テニスとケヅメリクガメの飼育。好きな作家は、ドストエフスキーチェーホフ、ジャン=ジャック・ルソー。

 

github.com

 

書評

パッと見ですが、「なるほど!」と思った説明がありました。

(p.96)

Column 学習ツールとしての単体テスト

 テストはソフトウェア開発の場面にだけ利用されるとは限りません。私は新しいプログラミング言語を学ぶとき、まず最初にその言語のテストフレームワークを導入します。そして教科書を読み進めながら、登場したサンプルコードを単体テストとして実行します。「こう書いたらどういう結果になるのだろう」と疑問が湧いたら、そのテストを書いて動作を確認します。教科書を読み終えたとき、手元にはたくさんの正しく動くテストコードが残ります。その使い古したテストコードが多ければ多いほど、言語への理解と自信を深めてくれるのです。

 本書に登場するサンプルコードも単体テストとして書かれています。そのテストコードは、GitHub Pagesとして http://akimichi.github.io/functionaljs/ に公開しています。

本書で関数型プログラミングの学習を進める際の一助としてください。

 

勉強のコツはいろいろあると思いますが、

プログラミング学習にテストを活用する

という発想が参考になりました!

 

akimichi.github.io

 

 

【追記】2017年4月15日 JavaScript学習の本選びのコツについてご紹介します。

参考書の選び方

jsstudy.hatenablog.com