gihyo.jp » 書籍案内 » 定期刊行物一覧 » WEB+DB PRESS » WEB+DB PRESS plusシリーズ » [増補改訂]関数プログラミング実践入門──簡潔で、正しいコードを書くために

書籍紹介

[増補改訂]関数プログラミング実践入門──簡潔で、正しいコードを書くために

[表紙][増補改訂]関数プログラミング実践入門──簡潔で、正しいコードを書くために

2016年9月24日発売

大川徳之 著

A5判/464ページ

定価(本体2,980円+税)

ISBN 978-4-7741-8390-9

  • 本書のサポートページ

→学校・法人一括購入ご検討の皆様へ

この本の概要

現場の方々に向け,関数プログラミングのエッセンスを厳選解説した入門書。関数型言語Haskellを用い,基本から,Java 8/C/C++/Python/JavaScript/Rubyをはじめ各種命令型言語との比較,オススメの開発/設計テクニック等を平易に解説。改訂版ではGlasgow Haskell Compiler 8ならびに新機構のStackage/stackへの全面対応,関数型言語由来の他言語の機能解説章(第8章)の新設(Swift/Go/Rust/C#等の例も紹介)をはじめ実践開発に役立つ解説を増強し,関数型言語でも命令型言語でも活かせる「使える基本」を凝縮しました。

こんな方におすすめ

  • 簡潔なコードを書きたい方
  • 安全でバグらせにくい,正しいコードの設計/実装に関心のある方々
  • JavaやC++などメジャーな命令型言語の新機能と関数型言語の関係に興味をお持ちの方々

本書の構成

本書では,各章は次のような構成となっています。

 第0章 [入門]関数プログラミング—「関数」の世界

第0章は導入です。関数プログラミングと,その実現のための関数型言語とはそれぞれ一体どういうものなのかを説明します。合わせて,関数プログラミング界隈の人とコミュニケーションが取れる程度の,基本的な概念や特徴,用語,歴史などを紹介します。いろいろな関数型言語やそれらで書かれたプロダクトの紹介なども含まれます。

 第1章 [比較で見えてくる]関数プログラミング
 —C/C++,Java,JavaScript,Ruby,Pytdon,そしてHaskell

第1章では,同一の問題設定の元でメジャーな言語のいずれかとHaskellを比較することで,Haskell(あるいは同様の関数型言語)の持つ機能がプログラミングに与える効果を俯瞰します。この時点ではHaskellの文法を説明していませんが,比較対照が存在しHaskellコードの解説も適宜盛り込んでいるため,エッセンスを読み取るのには支障がないような解説となっています。本当にはじめてHaskellに触れる方は,一度第1章をスキップし,第2章から第5章を読んでから戻ってきても良いでしょう。

 第2章 型と値—「型」は,すべての基本である
 第3章 関数—関数適用,関数合成,関数定義,再帰関数,高階関数
 第4章 評価戦略—遅延評価と積極評価
 第5章 モナド—文脈を持つ計算を扱うための仕掛け

第2章から第5章までは,Haskellをはじめ多くの関数型言語の安全性に多大な貢献を果たす「型」,Haskellのコードを読み書きするための基本的な文法や,Haskellと他の言語で実際に計算が進んでいくしくみの違い,特徴的で他の命令型言語で取り入れられ始めた機能であるモナドなどについて詳解します。

 第6章 オススメの開発/設計テクニック
 —「関数型/Haskellっぽい」プログラムの設計/実装,考え方

第6章では,Haskellでのオススメの設計法を,その思考過程がわかるようにステップバイステップ(step by step)で説明していきます。何がHaskellらしいコードであり,どう考えればそのようなコードを書けるのか,その手段の一つを把握できるでしょう。もし,(想定読者ではありませんが)あなたに関数型言語の経験があるのであれば,第5章までをスキップし第6章から読み始めるのは良い選択です。

 第7章 Haskellによるプロダクト開発への道
 —パッケージとの付き合い方

第7章は,実際にHaskellを使ってプロダクトを作るにあたり,どうコードベースやライブラリを管理していけば良いかを扱います。あなたのプログラムをオープンソースとして公開したり,業務でHaskellを使ったりする場合の参考となるでしょう。

 第8章 各言語に見られる関数プログラミングの影響
 —Ruby,Pytdon,Java,JavaScript,Go,Swift,Rust,C#,C++

第8章は,既存の,あるいは比較的新しい言語において,関数プログラミングに特徴的な各要素/機能がどのように取り込まれているかを見ていきます。それぞれの言語で関数プログラミングを行う上での助けとなり,また,その言語そのものに対する理解を深めるきっかけとなるでしょう。

 Appendix

巻末付録です。関数型言語が使えるプログラミングコンテストサイトや,ステップアップのために押さえておきたい参考文献や参考情報を紹介しました。

増補改訂における,おもな変更点

増補改訂に伴い,おもに以下の内容の追加/更新を行いました。

  • 本書内で使われるHaskellサンプルコード/処理系について,執筆時点最新版のGHC8に全面対応
  • 第0章,第7章を中心に,Haskell開発環境構築とパッケージ管理において現在デファクトスタンダードになりつつある,Stackage/Stackを採用し,その利用のための解説を追加
  • 1.6節「文書をルール通りに生成する ——安全なDSL」を新規追加
  • 2.7節「よくある誤解 ——実行時型情報を利用したい」を新規追加
  • 4.3節「評価の制御 ——パフォーマンスチューニングのために」において,評価の制御に関する解説をGHC8による関連拡張と共に強化
  • 第8章「各言語に見られる関数プログラミングの影響 ——Ruby,Python,Java,JavaScript,Go,Swift,Rust,C#,C++」を新設

本書で必要となる前提知識

本書では,前提として,以下に関する知識等を必要とします。❶❷は比較や概念の対比という形で現れます。❸は,Haskellや他の言語のサンプルコードを実際に試してみるためには必要です。

また,必須ではありませんが,第8章では❹の知識もあると良いでしょう。

  • ❶メジャーな命令型言語に対する経験/知識
    • Java,C言語,C++,Ruby,Python,JavaScriptなど
    • Java 8,C++11まで触れていると良い
  • ❷構造化プログラミングやオブジェクト指向プログラミングの基本事項
    • GoF(Gang of Four)のデザインパターンなど
  • ❸Unix系OSやWindowsの基本操作(コマンドプロンプトや各言語の開発/実行環境)
  • ❹比較的新しい言語の知識(Go,Rust,Swiftなど)

著者プロフィール

大川徳之(おおかわのりゆき)

 

東京大学計数工学科数理情報工学コース,東京大学大学院情報理工学系研究科数理情報学専攻,卒業。キヤノンソフトウェア(株)を経て,

(株)朝日ネットにて,HaskellでのWebアプリケーション開発や,開発環境/インフラの構成管理などに携わっていた。そろそろどうにかしてAgdaで仕事ができないものか虎視眈々と隙を窺っている。バージョンアップ毎にだんだんと増えていくGHCのコンパイル時間が最近の悩み。

コメント