「なぜこの本を書いたのか」から引用する。
Java や、それに似た言語を知っていて、 JavaScript をいまの姿で(歴史的な残滓を除いた形で)学びたいと思っているプログラマは何百万人もいるだろうに、そういう人たちのための本を見つけることができないのは、おかしなことではないか。
だから、私がこの本を書くことになった。
まえがきにある、5 つの大原則は大事だと思う。以下引用する。
- 変数は、
var
でなく、let
またはconst
で宣言せよ。- strict モードを使え。
- 型を理解し、自動的な型変換を避けよ。
- プロトタイプを理解しよう。しかし、クラスとコンストラクタとメソッドには現在の構文を使おう。
this
は、コンストラクタまたはメソッドの中でだけ使おう。
私は頭が悪いので、本書を読み進めるのが難しかった。
各章の末尾には演習問題がある。第4章「オブジェクト指向プログラミング」の演習問題の 8 番 (p.109) をやってみた。
8 抽象クラスの古典的な例が、ツリー(木構造)のノードである。 ノードには、子供のある親ノードと子供のない葉ノードの2種類がある(コードブロックの引用は割愛)。 Java や C++ では、このようにツリーノードをモデリングするだろう。けれどお JavaScript では、
n.depth()
を呼び出せるようにするのに、抽象クラスは必要ない。継承なしでクラスを書き直し、 テストプログラムも作ろう。
書き直してみてテストプログラムも作ったが、果たしてこれでいいのだろうか。
コード
/* Cay S. Horstmann : JavaScript モダンプログラミング完全ガイド */
/* p.109 ekz08.js */
"use strict";
class Node {
constructor(value, children) {
this.value = value;
this.children = children;
}
depth() {
return this.children === undefined
? 1
: 1 + Math.max(...this.children.map((n) => n.depth()));
}
}
const tarao = new Node("Tarao");
const sazae = new Node("Sazae", [tarao]);
const katuo = new Node("Katuo");
const wakame = new Node("Wakame");
const fune = new Node("Fune", [sazae, katuo, wakame]);
console.log(`tarao : ${tarao.depth()}`);
console.log(`sazae : ${sazae.depth()}`);
console.log(`katuo : ${katuo.depth()}`);
console.log(`wakame : ${wakame.depth()}`);
console.log(`fune : ${fune.depth()}`);
実行結果
PS C:> node .\ekz08.js tarao : 1 sazae : 2 katuo : 1 wakame : 1 fune : 3
書名 | JavaScript モダンプログラミング完全ガイド |
著者 | Cay S. Horstmann |
発行日 | 2020 年 12 月 21 日 初版第1刷 |
発行元 | インプレス |
定価 | 3000 円(本体) |
サイズ | A5 判変形 ページ |
ISBN | 978-4-295-01056-2 |
その他 | 越谷市立図書館で借りて読む |
まりんきょ学問所 > コンピュータについて > コンピュータの本 > JavaScript, altJS > Cay S. Horstmann:JavaScript モダンプログラミング完全ガイド