Androidスマートフォン特集 Amazonベビーレジストリ 本を聴くオーディブル Amazon MasterCard nav_flyout_biss nav_flyout_videogame AT TOKYO2019 【新登場】Fire HD 8 Fire TV グルメギフト ドラッグストア クーポン祭り 秋の味覚を楽しむキッチン用品 Echo Kindle  Amazon Music Unlimited - 3か月99円で音楽聴き放題 野球用品 戦闘車 シーズン2

カスタマーレビュー

2015年4月28日
【追記:本書前半に関してこのレビューよりも詳しく適切なレビューが Qiitaという技術情報サイトに掲載されています。amazonのレビューの制約でURLを記載できませんが、購入前に本書の技術関係書籍としての水準を知るために "Qiita nonstarter" で検索して当該レビューを読まれることをお勧めします。なお、当該レビューとコメント欄での本書に対する批判的評価に対し、同一人物と思われる複数のアカウントが著者独特の主張を擁護すべく300件弱に及ぶ極めて多数のコメントをつけています(迷惑行為としてもある種壮観ですので一見の価値はあるかもしれません)。】

本書の技術的内容は実質的にその7割が「0から9までの数をすべて足すコードを書け」ということに尽きています(本書の水準は関数型プログラミングの書籍であるにも拘らず再帰が扱われるのが400頁の中でフィボナッチ数列を例に出す1箇所だけだという事実からも推察できるかと思います)。後はFacebook-ReactライブラリのサンプルコードとFRPの拙劣な説明です。実質的に3〜4行を超える有意なコード片は殆ど出てきません(そしてその多くが繰り返しです)。したがって、関数型プログラミング自体に興味のある読者にとって本書の内容はほぼ

[0,1,2,3,4,5,6,7,8,9]
.reduce(plus); //をすべて足す

というものに尽きています。しかし、この説明は整数の加法がたまたま交換法則・結合法則を満たしているから成り立つように見えるにすぎません。reduce(f)を適用する際に、配列の最初の要素は関数fの第一引数の型を持たねばならず残りの要素は第二引数の型を持たなければなりませんからこの配列は本質的にヘテロジニアスなものですし、左畳込(いわゆるfoldl)と右畳込(foldr)の違いを考えれば、結局は関数fの適用順と蓄積の経過を理解しなければfoldを理解したことにはなりません。本書の説明は一見わかりやすく見えるのですが、結局は本質的な理解を妨げるものであると思います。また著者はreduce関数やrange関数やmap関数を命令型のループでしか書けないとしていますが(たとえばpp. 88,96,106)、これは明らかに誤りですし本書の目的からすれば関数型で書いてみせるべきものです。それでは効率が悪いように見えるかもしれませんが、それが本来の関数型のプログラミングスタイルですし、それが非効率になるのは関数型プログラミングを支援するように設計されていないJavaScriptという言語の問題であって、とりもなおさず関数型プログラミングの説明を本書のようにJavaScriptでしようとすることが最初から不適切な選択であることを示しています。

FRPの説明もごく拙劣です。状態を持った手続きは引数で状態を持ち回すようにすることによって純粋な関数にできる、という関数型プログラミングの基本的な技法を、その最も基本的な原理を説明せずに(或いはことによると理解せずに)、特殊事例について述べているに過ぎません。根本的には、時間による値の変化は時間から値への関数として表現でき、イベントによる値の変化は、値とイベントから値への関数として表現できる、というだけのことですが(簡単ですが重要な点ではあります)、そうした本質的な説明はなされずに、ひたすら著者の不明瞭な思弁が垂れ流されるだけです。また著者が、参照透過性や遅延評価やその他の関数型プログラミングにまつわる様々な概念を混同し或いは不当に同一視しているために、それらの記述を鵜呑みにしてしまえば読者は誤ったないし混乱した理解を得てしまうように思います。なによりまずいことに、著者がFRPと称して掲出しているReactを用いたコードは単にスパゲティなだけの命令型コードです(順を追って読むと単に「s=s+1」のような命令型コードを迂遠に書いてそれと分かり難くしただけのものであることがわかります)。

また、著者は命令型言語での「n=n+1」のようなステートメントを「論理破綻」だと主張しています(pp.144-5)。また右辺と左辺で変数nが違う時間に属しているとしていますが、この珍妙な主張は著者が左辺値と右辺値という基本的な概念を理解していないことから生じています。そもそも「n=n+1」は数式ではなく各言語がそれぞれに意味を与えているものなので、数式として論理破綻していると言われても困るでしょう。問題は、著者が命令型プログラミングの基本を(そして恐らく関数型プログラミングの基本も)理解しないままに、それを口を極めて非難していることにあります。

本書の過半を占める、その意味が定義されたり説明されることの決してない著者の独自の「論理」や「計算」という語の用法とそれに基づいた大量の思弁は、おそらく殆どの読者にとって(技術的意義はもとより)そもそも意味をなさないナンセンスですし、たとえばp.238以降展開されるような哲学者や自由意志論への言及は単純に思想史上の問題としても誤解に基づいたものに過ぎません(そのついでにアラン・ケイやガリレオやデカルトを気取られたりするとどういう顔をして読めばいいのかもわかりませんが)。

最後に、もし本書を(ネタではなく)本当に読もうと思った人がいれば、本書ではなく浅井健一『プログラミングの基礎』サイエンス社(2007)と大川徳之『関数プログラミング実践入門』技術評論社(2014)などを読めば、金と時間をムダにせずに済みます。
716人のお客様がこれが役に立ったと考えています
1コメント1件 違反を報告 常設リンク

商品の詳細

5つ星のうち2.9
34
¥1,928+ Amazonプライムなら、お急ぎ便が無料