SSブログ

プロになるためのJavaScript入門の本、技評から貰った。 [プログラミング]

プレゼントを申し込んだら、また技術評論社から本もらっちゃったよ(別にツリでも関係者でもなんでもないです)。先に、読者ページヘのプレゼントも応募していたのだけれど、続けての当選ありがたいことです。というか、景品法とかに引っかかってないよなw。

確率統計的なところから測れないほどの運の悪さだと思ってたけど、ハマればそれなりにいいことも続くのかもなぁ。自分のいいと思ったことを積極的にやっていく姿勢は必要なんだろうなと思う。0より1、1に満たなくても少しでもとば口をつければ、次に役立つことも多い。基本、ネガティブな人間だけど、無駄にポジティブになる必要はなくても、やれる余裕があればやるべきなんだろうなぁ。まぁそもそもが積極的に何かをするより、何か大きな潮流に流され、波に飲まれていく感じがあったが、それはそれで流されていって、面白そうなら深堀りや方向転換すればいい。そうすれば案外楽しくないわけでもない。


何にしても、あったらいいなと思っていた本がタダで手に入ったので、必要以上に使っちゃおうかなという気にもなるもの。結構、お金をかけないで貰ったものとか、ずーっと使っちゃう傾向にあるんだよね。買い物は買って満足しちゃうけど、貰い物は貰ったところからスタートするので、わりと実用的に使う傾向があって、今回もその傾向が出そうですね。他にJavaScriptの本って買っていなくて、node.jsで色んな意味でハマったクチなので、今のタイミングかよっていう気もしなくはないけど、ないよりあった方がいいに決まっている。

あまぞん
プロになるためのJavaScript入門 ~node.js、Backbone.js、HTML5、jQuery-Mobile (Software Design plus)

プロになるためのJavaScript入門 ~node.js、Backbone.js、HTML5、jQuery-Mobile (Software Design plus)

  • 作者: 河村 嘉之
  • 出版社/メーカー: 技術評論社
  • 発売日: 2012/12/07
  • メディア: 大型本


らくてん



もらっといてなんだけど、きっちりと書評はさせて頂くつもりです。元々プレゼントであって、モニターじゃないし、書く必要は全くないのですが。立ち読みした感じでは悪くなかったし、技評の本だから大外しは無さそう。

 
まずJavaScriptの前提から言ったほうがいいですね。これはほんの頭の方にも詳しく書かれているので、箇条書き的に書きますが、前にも書いたのでそれほど深く突っ込みません。

JavaScriptには3つの面があります。

・ECMAScriptである面
・ブラウザのクライアント側のプログラミング言語
・node.jsなどのサーバ側のCommonJS的な側面

これらは同じ言語なので当然重なる面はあるのだけれど、知識的には別物として考えるべき部分があります。

そもそもの生まれの経緯からすると二番目のブラウザのマクロ言語的な成り立ちが一番先なのですが、MSの非互換のせいでECMAにすがりつくことを余儀なくされたらしいです。そして、何故かnode.jsが大流行して今に至る、という感じでしょうか。

クライアントサーバという違いで大きく実装は変わるのだけど、ECMAScriptであることは変わらないと思うので、文法は一緒で、実行する時は大した違いがないのだが使うライブラリは全く違う、と理解するのが正しいでしょう。そもそも、プログラミング言語はそういう傾向があって、OSの違いによるライブラリの違いというのは、単純な高レベルのスクリプト言語でもない限りは(以前どこでも動くと豪語していたJavaですら)絶対にあるわけで、別に珍しいことではありません。

結局のところ、プログラミング言語は何のラッパーとするのか、という点において同じではないのでしょうか。C言語は元々はアセンブラのラッパーである側面が大きかったと思うし(最近はC++と同じで自らのコンパイラなどを構成して自己言及してるけど)、JavaはJVMという仮想機械、プラットフォームに付随するラッパーで、RubyなどのLL言語はC言語などの低級コンパイル言語のラッパーであると考えるとすんなりいきそうです。

コンピュータ言語は複雑さをラッピングするために生まれてきているはずで、そういう意味ではJavaScriptがクライアント・サーバの両面で使えるのは画期的なことだと思われます。秀丸マクロみたいに、C言語っぽいマクロを持つこともできますが、元々がマクロ的な言語であるものが、普通にそのマクロを持つアプリケーションを通さないで実行されるというのは、とてもおもしろいです。言語的なチープさは否めないけど、それはC言語が「低級コンパイル言語だから存在も低級である」と言えないのと同じで、JavaScriptは昔ほどは機能の足りなさを嘆かなくてもいいようにはなっているはずです。

ちなみに、CommonJSはJavaScriptを一般的なプログラミング言語として使うには足りない面を足したものだと理解しています。細かいところは、仕様を全然読んでないので全くわからないのですが、他のファイルをrequire()するとか、そういう汎用コンピュータ言語的に必要な物を加えたものと考えればいいのでしょう。先も言いましたが、実行環境とライブラリの違いですから、ここで使えるものがこっちでは使えない、というのはある程度覚悟しておいたほうがいいと思います。



さて前置きはこのくらいにして、本の概要をザックリとななめ読みします。

「プロになるための」と書いてあるから、他の言語であるようなところは説明していないと思ったのですが、80ページくらいこってり基礎のところを説明しています。ん~意外。あえて間違えて、微妙なハマり方をしないように説明しているのはとてもいいと思います。プログラミングは往々にして、正解以外はみんな必ず不正解というわけでもないし、誤りではないがそんな書き方はしないというしきたりはありますしね。


それに入る前にも、プロトタイプベースのオブジェクト指向の説明が少しあって、確かに腑に落ちる解説になっています。細かい説明よりザックリ理解を目指している感じ。プロトタイプベースと言うより、インスタンスベースって言われたほうが分かりやすいな、確かに。

こってり基礎部分の説明と言いましたが、JavaScriptに特有な部分の詳しい説明をしているので、for文がとか他の基礎的な部分の説明はほぼ飛ばしています。その分、for-in文の説明に割いていたり、そこいらへんのバランスは入門書としては、他の言語を知らないビギナーには辛いだろう。でも、とりあえずは存在する文法については言及しているので、全く入門書ではないとも言えない。でも、多くの読者はJavaScriptの入門であっても、プログラミングの入門ではないだろうから、これは折衷案としては良く出来たほうだと思います。

図でノーテーションを示していたんだけど、あんまり分かりやすくない。でも、図表にするにはこれくらいの説明は必要なんだろうけど、正直知っている人じゃないと分かりにくい。知ってた上で、あぁそういう事ね、と理解するには容易いが、C言語系のプログラミングをした事ない人には辛いかな。

すごいと思ったのは、徹底的に間違えかねない書き方を例示しているところ。例えば、

if(true){ };

という文で、{ }という空ブロックを実行しているのか、{ }という空オブジェクトを生成しているのか、という疑問。正直、そこまで掘り下げて考えたりしてなかった。まぁ常識的に考えればブロックなのかオブジェクトなのかというのは人間にはわかるけど、そういう意図はコンピュータには読めないことも数多くある。そういう意味において、{ }がブロックだったり、オブジェクトであったり、inという単語に2つの意味があったりするJavaScriptはあんまり筋がいい言語ではないな、と感じざるを得ない。

それは、オブジェクト指向にしても、昔のJavaのように数値とかのオブジェクトではないプリミティブ型で扱う場合もあるし、プリミティブ型で書いてあるものだけど、オブジェクト型のメソッドが使えたりして、正直書き心地重視になっている部分が多分にある。

例えば、
var ss = new String("hoge,foo,bar");
var array = ss.split(",");


var array = (new String("hoge,foo,bar")).split(",");


var array = "hoge,foo,bar".split(",");

はどちらもarrayに[hoge, foo, bar]という配列が入るようです。最初の2つのコンストラクタとインスタンスの違いはいいかもしれないです。だけど、三つ目のそもそもプリミティブ型なのに、同オブジェクト型のメソッドが使えるって、考え方に一貫性がなさすぎると思いません? 仮にオートボクシングというもの(?)であっても、言語的にカッチリしてなくてキモイ。でも、new String("hoge") !== "hoge" がtrueなんだって。気持ち悪いね。new String("hoge") == "hoge" がtrueなのもキモい。意味わからん。

JavaScriptは結構気持ち悪い所がたくさんある言語だということが分かった。これ以上書くと長くなりすぎるから書かないけど、他の言語を知っていたとしても、基礎的な文法に対して書くことが80ページぐらいある、ということを承知しておいたほうがいい。サンプルを例にさせることは出来るかもしれないけど、自分で書くとなると他の言語の知識のせいでハマる可能性も大だ。とにかく、浅はかな知識でやるとたまにハマるし、そのハマリは言語がきっちりと規定されていない事に起因はしていないのが救いでしょう。きちんとしたECMAScriptであるけど、今までのオブジェクト指向などの常識でいくとちょっと気持ち悪い言語、というかんじ。



今回の本の紹介で、全体をザックリ見ていくつもりでしたが、文法のところからちょこちょこ引っかかってくる部分が大有りでしたので、正直ななめ読みは失敗しました。3章のDOMとXHRもまだ読みきれてません。ザラッと全体を読んでからまた書いてみます。それでもjQueryとか、node.jsのCommonJSの仕様のところでまたつっかかりまくりそう。

はじめの部分を読んだ上の感想ですが、JavaScriptは変でも、この本はその変なところも余すことなく受け止めている、と感じます。読んでない先はわかんないけどね。でも、自分で金出して買っても問題はないくらいだとは思う。ただ、リファレンスでは全くなくて、通読向きであることは確か。思ったよりもJavaScriptは勉強するところ多いんじゃんと思いましたが、ライブラリも充実してきたし、それをバグを入れずに利用できるようにすればいいだけであろうというのが使い道として言えることでしょう。

タグ:JavaScript
コメント(0) 

コメント 0