武書房

GREEのレビュー機能が終わるので今後はこっちに書きます。

初めてのJavaScript 第3版

2024/4/30 - 5/13 で読了。
若者たちに教えるのに間に合った!

784 ページあるほう(O'Reilly Japan - JavaScript 第7版)を読んで完全理解する意気込みだったが、丸善に置いてなかったので日和ってこっちにした。

以下、個人の感想です。

総論

言語仕様について

  • 「そんなにイヤな言語じゃなくて良かった」という印象。C# ほど「何やねんこの言語」という感じはなかった
  • ほぼ Ruby 脳で理解できたので「Java っぽい見た目した Ruby」という捉え方で差し支えなさそう
    • ちょいちょい感覚の違いはある。例えば p.363
      Object.freeze(o); こういうのは
      o.freeze(); と書きたくなるが、
      Object.freeze() - JavaScript | MDN 「静的メソッド」となってるからダメか。
      →いや、freeze なんてすでに世の中で定義されまくってるであろうから衝突を避けるためか。デファクト言語のつらさ。
    • 記号も多め、なので Perl っぽさはある。とくに括弧はゴチャつきがち
  • セミコロン必要なのは現代の観点からは「めんどくさい」けど。Java* という名前やししゃーないか

本の作りについて

  • 各章が適度に小分けされてて読みやすい(延々知識の羅列が続くような章がない)
  • Larry Wall ほどのジョークはない
  • 例題は簡単め。カーニハン師ほどハードじゃなくて良い

学習メモ

まえがき

3章 変数、定数、リテラル、データ型

  • 32 string の由来は string of characters。知らなんだ!
  • 32 「"」「'」違いはない
  • 35 テンプレートリテラル Ruby でいう "#{foo}"
  • 38 シンボル Ruby と思想は一緒かな? でも生成がややめんどい
  • 40 オブジェクトにいつでも簡単にメンバ後付け可能、すごい柔軟! これはびっくりした。
  • 47 配列の最後を [-1] で取れないのはめんどくて残念。[-1] や [-2.3] といった添字が「別の意味で」使える、というのもすごいが

4章 制御フロー

  • 60 while, if のスタイルがK&Rじゃない!
    →公式はK&R風で安心。というか Prettier を使えってことか。
    JavaScript のサンプルコードの作成ガイドライン - MDN Web Docs プロジェクト | MDN
    • どれも合理的で、進んで従い(従わせ)たくなるルールばっかりなので好ましい。ええやん!
    • ここの例を見てるだけでも文法の復習になっていいな
  • 60 「+=」ないの?!と嫌いになりかけたが、p.87 であると知った。最初から推奨される書き方をしてくれ~!
  • 62 (funds > 1) はバグでは? > 0 のはず。(p.79 も同様)
    →その後の全体コードでは修正されてた
  • 67 US英語で dice の単数形は die、知らなんだ
  • 70 if(bets[face] > 0) 私ならこの条件は省略するかな
  • 72 この本でEBNFが出てくるとは!
  • 78 for...of これが foreach か。
  • 82 フローチャートの限界に言及。初心者向けの本として良い

5章 式と演算子

  • 83 代入した結果も値を持つ。わりと高度な話。Ruby の「すべては式」を思い出す
  • 95 被演算子が論理値ではない場合は、「結果を決めた」値が返されます … 面白い仕様だが納得はできる

6章 関数

  • 119 call, apply, bind
    強引な仕様にも思えるが。要は便利機能?

7章 スコープ

  • 126 JavaScriptにおいては、「宣言」と「定義」は同じ
  • 136 var、巻き上げ 気色悪!と思うけど、コンパイラ言語みたいなもんか

8章 配列

  • 144 slice では(配列と違って)負の添字が使える。惜しい
  • 152 reduce … 一見小難しいが、Ruby の inject やな(と思ったら Ruby でも reduce あったw)

9章 オブジェクトとオブジェクト指向プログラミング

  • 161 オブジェクトのプロパティは順序保証なし。せっかくECMAていう単一の標準があるのに強制できなかったのか
  • 165 ES2015 によりクラスを直感的に定義できるようになった。ES2015 以降に学んでよかったw
  • 167 private なし! まあなくても書けるプログラムが大半か。
    →できてた! プライベートプロパティ - JavaScript | MDN
    しかしここ、ESバージョン何で導入されたかは書いてないのか?
  • 173 プロトタイプ、小難しいけど説明はわりとあっさり。Ruby でいう特異メソッド(の逆)みたいなもんか
  • 174 static キーワード。クラス変数はクラス名で修飾。「@@」よりわかりやすい?
  • 175 extends, super … ああこれ "Java"Script や!
  • 177 すべてのオブジェクトは Object のインスタンス … めちゃくちゃ Ruby やんw
  • 179 多重継承を mixin で実現…Ruby やん!w
  • 182 「オブジェクト指向言語とは呼べない」という人さえいました わからんでもないが、ほぼ実現できてるやんとも思う。

10章 マップとセット

  • 183 Map いわゆるハッシュや辞書。やっと来た!
  • 184 get/set がややめんどいか
  • 185 entries は Map の「デフォルトイテレータ」! やるなあ
  • 186 WeakMap これはだいぶ高度…初心者には意味(恩恵)わからん機能の一つやな
  • 189 以前はオブジェクトで代用していたが、いまは本当のマップが使える。ES2015 以降でよかった

12章 イテレータとジェネレータ

  • 208 ジェネレータのキモ面白挙動、ややこしいが図示されててわかりやすい。まあ他言語にもあるしな

14章 非同期プログラミング

  • 251 「プロミスを返す関数を呼び出すプロミスを返す関数を返す関数」中上級者向けの説明。構文的な意味は一応わかったが、ややこしいな!

17章 正規表現

  • 281 文字列側は match、正規表現側は test
  • 282 入力文字列の「消費」。この考え方は知らんかったかも!
  • 293 greedy の逆、lazy matching。こっちの呼び名忘れてた
  • 294 \1 などによる後方参照。この使い方も忘れてたな
  • 298 この章、例がけっこう具体的で本格的、だが説明あっさりなので、ここで初めて学ぶ人は挫折するかもw わりと読み切るのしんどかった。
  • 301 先読み。これも知らんかったかも?

18章 ウェブブラウザのJavaScript

  • 317 イベントの伝播(下降 capture、上昇 bubble)。ここは絵がないとむずい。さらに example は同時にまとめてやりすぎでは?

19章 jQuery

20章 Node.js

  • 344 return console.log(...); という書き方、この本で多用されてるがいまだに慣れない。筆者の奇癖とかではないの?
    →ぐぐったら世の中的にもよく使われてそう。ただ意味的におかしいやろ、短く書ければいいってもんちゃうやろ、という不服は残る

付録B 演算子の優先順位

  • 378 ビットANDが等値(== など。「等価」のほうが一般的か)より低いのは意外。括弧付け忘れのバグありそう
    →いやC言語からそうなのか!

誤字脱字など

妙にいっぱいあってやや残念。日本での出版を急いだから?(私が買ったのは 2020/11/10 初版第6刷 で、直す機会もありそうだが。そんなに読まれてない?)
あるいは「ヴァン・ヘイレンのM&M」的な仕掛けなのか?と疑ってしまうほど全編に散りばめられてた。

  • 1 Schme
  • 1 Guy SttleSteele
    1ページ目からこれ。不安になってくる
  • 109 変更されてします
  • 199 Firfox
  • 208 呼び出しすと
  • 214 副作用とは見なす
  • 220 13-05-4 このインデント(というか空白埋め)はさすがに嫌すぎでは?
    というか載せるの 13-05-5 の例だけでいいんでは…
  • 231 マイクロミリ秒
  • 232 setTimeout 慣れれば
  • 255 上でした 示した?
  • 255 ここの catch 節だけK&R風(catch のあとにスペースあり)。筆者も意識してない?
  • 321 発せされます 正しくは「発されます」かな。このページだけで4箇所はある。
  • 323 イベントの伝播 は前の話!
  • 337 何を関数なのか
  • 339 マルチププロセス
  • 348 'use strict' セミコロン抜け
  • 382 マンドライン