From ef7f46d073cfa4d07b9ee930ca436cd94d1b487d Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 2 Mar 2018 11:03:56 +0100 Subject: [PATCH 001/476] Make picture borders a little lighter --- html/css/ejs.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/css/ejs.css b/html/css/ejs.css index ce690d3ba..8b9fb3a88 100644 --- a/html/css/ejs.css +++ b/html/css/ejs.css @@ -390,7 +390,7 @@ figure.chapter img { figure.framed img { border-radius: 50%; - border: 4px double black; + border: 4px double #666; } @media screen and (max-width: 500px) { From 6edae462acc85541ccdce867e912c52cffcd5329 Mon Sep 17 00:00:00 2001 From: Lukasz Date: Thu, 1 Mar 2018 21:29:29 +0100 Subject: [PATCH 002/476] Create colored internal references in PDF format --- pdf/book.tex | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/pdf/book.tex b/pdf/book.tex index 8e64fb6b4..9884840f2 100644 --- a/pdf/book.tex +++ b/pdf/book.tex @@ -1,7 +1,7 @@ \documentclass[fontsize=13pt,oneside,headings=small,chapterprefix]{scrbook} \usepackage{listings} \usepackage{graphicx} -\PassOptionsToPackage{hyphens}{url}\usepackage[hidelinks]{hyperref} +\PassOptionsToPackage{hyphens}{url}\usepackage{hyperref} \usepackage{natbib} \usepackage{scrhack} \usepackage{charter} @@ -66,6 +66,8 @@ \graphicspath{{../}} \definecolor{coveryellow}{rgb}{0.997,0.840,0.122} +\definecolor{blue-bayoux}{rgb}{0.267,0.4,0.467} +\hypersetup{colorlinks,linkcolor=blue-bayoux,urlcolor=black} \makeindex @@ -112,7 +114,10 @@ bonus chapter included, printed by No Starch Press at \url{https://www.amazon.com/Eloquent-JavaScript-2nd-Ed-Introduction/dp/1593275846}. -\tableofcontents +{ + \hypersetup{hidelinks} + \tableofcontents +} \mainmatter @@ -164,6 +169,9 @@ \backmatter -\printindex +{ + \hypersetup{hidelinks} + \printindex +} \end{document} From 45c079aa7e740f81d16a56415de28b53253ec1a9 Mon Sep 17 00:00:00 2001 From: Pooria Rashidi Date: Thu, 1 Mar 2018 15:45:57 -0700 Subject: [PATCH 003/476] Fix typo on 12_language.md change 'an scope object' to 'a scope object' --- 12_language.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/12_language.md b/12_language.md index cd5d4e9c6..a68daf442 100644 --- a/12_language.md +++ b/12_language.md @@ -277,7 +277,7 @@ enough for our purposes. {{index "evaluate function", evaluation, interpretation, "syntax tree", "Egg language"}} What can we do with the syntax tree for a program? Run it, of course! -And that is what the evaluator does. You give it a syntax tree and an +And that is what the evaluator does. You give it a syntax tree and a scope object that associates names with values, and it will evaluate the expression that the tree represents and return the value that this produces. From fe56859527a77caa62119b21b1ae04e7b240ff8e Mon Sep 17 00:00:00 2001 From: Pooria Rashidi Date: Thu, 1 Mar 2018 18:43:04 -0700 Subject: [PATCH 004/476] Fix typo on 13_browser.md changed "an dialog" to "a dialog" --- 13_browser.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13_browser.md b/13_browser.md index 5cbfdf276..cda3afb86 100644 --- a/13_browser.md +++ b/13_browser.md @@ -319,7 +319,7 @@ document. {{index "alert function", timeline}} Such a script will run as soon as its `\n", + include: ["code/draw_layout.js", "code/chapter/22_fast.js"], + exercises: [ + {name: "Pathfinding", + file: "code/solutions/22_1_pathfinding.js", + number: 1, + type: "js", + code: "function findPath(a, b) {\n // Your code here...\n}\n\nlet graph = treeGraph(4, 4);\nlet root = graph[0], leaf = graph[graph.length - 1];\nconsole.log(findPath(root, leaf).length);\n// → 4\n\nleaf.connect(root);\nconsole.log(findPath(root, leaf).length);\n// → 2\n", + solution: fs.readFileSync("code/solutions/22_1_pathfinding.js", "utf8") + }, + {name: "Timing", + file: "code/solutions/22_2_timing.js", + number: 2, + type: "js", + code: "", + solution: fs.readFileSync("code/solutions/22_2_timing.js", "utf8") + }, + {name: "Optimizing", + file: "code/solutions/22_3_optimizing.js", + number: 3, + type: "js", + code: "", + solution: fs.readFileSync("code/solutions/22_3_optimizing.js", "utf8") + } + ] }); if (allSolutions.length) { @@ -126,9 +155,7 @@ else process.exit(1); function prepareHTML(code, include) { - return "\n" + (include || []).map(function(s) { - return "\n"; - }).join("") + "\n" + code; + return "\n" + (include || []).map(s => "\n").join("") + "\n" + code; } function guessType(code) { @@ -136,15 +163,15 @@ function guessType(code) { } function getStartCode(text, includes) { - var found = /\n```(.*?\bstartCode:.*)\n([^]*?\n)```/.exec(text); + let found = /\n```(.*?\bstartCode:.*)\n([^]*?\n)```/.exec(text); if (!found) return "" - var snippet = found[2].replace(/(\n|^)\s*\/\/ →.*\n/g, "$1"); - var directive = String(PJSON.parse(found[1]).startCode), m; + let snippet = found[2].replace(/(\n|^)\s*\/\/ →.*\n/g, "$1"); + let directive = String(PJSON.parse(found[1]).startCode), m; if (m = directive.match(/top_lines:\s*(\d+)/)) snippet = snippet.split("\n").slice(0, Number(m[1])).join("\n") + "\n"; if (m = directive.match(/bottom_lines:\s*(\d+)/)) { - var lines = snippet.trimRight().split("\n"); + let lines = snippet.trimRight().split("\n"); snippet = lines.slice(lines.length - Number(m[1])).join("\n") + "\n"; } if (guessType(snippet) == "html") @@ -154,28 +181,28 @@ function getStartCode(text, includes) { } function chapterZipFile(text, chapter) { - var spec = text.match(/\n:zip: (\S+)(?: include=(.*))?/); + let spec = text.match(/\n:zip: (\S+)(?: include=(.*))?/); if (!spec) return null; if (!chapter.start_code) throw new Error("zip but no start code"); - var name = "code/chapter/" + chapter.id + ".zip"; - var files = (chapter.include || []).concat(spec[2] ? JSON.parse(spec[2]) : []); - var exists = fs.existsSync(name) && fs.statSync(name).mtime; - if (exists && files.every(function(file) { return fs.statSync("html/" + file).mtime < exists; })) + let name = "code/chapter/" + chapter.id + ".zip"; + let files = (chapter.include || []).concat(spec[2] ? JSON.parse(spec[2]) : []); + let exists = fs.existsSync(name) && fs.statSync(name).mtime; + if (exists && files.every(file => fs.statSync("html/" + file).mtime < exists)) return name; - var zip = new (require("jszip")); - files.forEach(function(file) { + let zip = new (require("jszip")); + for (let file of files) { zip.file(chapter.id + "/" + file, fs.readFileSync("html/" + file)); - }); + } if (spec[1].indexOf("html") != -1) { - var html = chapter.start_code; + let html = chapter.start_code; if (guessType(html) != "html") html = prepareHTML("", chapter.include); zip.file(chapter.id + "/index.html", html); } if (spec[1].indexOf("node") != -1) { zip.file(chapter.id + "/code/load.js", fs.readFileSync("code/load.js", "utf8")); - var js = chapter.start_code; + let js = chapter.start_code; if (chapter.include) js = "// load dependencies\nrequire(\"./code/load\")(" + chapter.include.map(JSON.stringify).join(", ") + ");\n\n" + js; zip.file(chapter.id + "/run_with_node.js", js); } diff --git a/src/run_tests.js b/src/run_tests.js index 10b1156e1..7d63df8b1 100644 --- a/src/run_tests.js +++ b/src/run_tests.js @@ -64,8 +64,9 @@ while (m = re.exec(input)) { stripped = stripHTML(snippet) snippet = stripped.javascript } + let onSemi = chapNum == 1 || /\bnosemi/.test(config) ? null : () => { throw new Error("Missing semicolon") } try { - acorn.parse(snippet, {onInsertedSemicolon: chapNum == 1 ? null : () => { throw new Error("Missing semicolon") }, + acorn.parse(snippet, {onInsertedSemicolon: onSemi, sourceType: "module", ecmaVersion: 8}) } catch(e) { @@ -243,7 +244,7 @@ function nextSandbox() { if (i == boxes.length) return let sandbox = boxes[i] i++ - if (chapNum < 13 || chapNum >= 20) { // Language-only + if (chapNum < 13 || chapNum >= 20 && chapNum < 22) { // Language-only try { ;(new Function("console, require, module", baseCode + sandbox.code))(_console, chapNum >= 20 && fakeRequire, {}) nextSandbox() From c789db86ef42575adee2266ac59a72003e1386f8 Mon Sep 17 00:00:00 2001 From: Lukasz Date: Tue, 6 Mar 2018 11:59:48 +0100 Subject: [PATCH 018/476] Make preformatted text wrap Issue #174 --- epub/style.css | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/epub/style.css b/epub/style.css index d93809db2..53e73556c 100644 --- a/epub/style.css +++ b/epub/style.css @@ -14,7 +14,7 @@ body { font-family: Georgia, 'Nimbus Roman No9 L', 'Century Schoolbook L', serif; - font-size: 20px; + font-size: 100%; line-height: 1.45; color: black; background: white; @@ -30,19 +30,17 @@ pre { line-height: 1.35; margin: 1rem 0; position: relative; - font-size: 16px; + font-size: 80%; + white-space: pre-wrap; + overflow-wrap: break-word; } code, pre { font-family: 'PT Mono', monospace; } -@media (max-width: 650px) { - pre { font-size: 10px; } -} - code { - font-size: 18px; + font-size: 90%; padding: 0 2px; } From 3f0e331ea3594c36a237d6c2f3d245f335b04fef Mon Sep 17 00:00:00 2001 From: Lukasz Date: Tue, 6 Mar 2018 20:03:04 +0100 Subject: [PATCH 019/476] Make preformatted text font-size responsive (e-book) --- epub/style.css | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/epub/style.css b/epub/style.css index 53e73556c..6c114a997 100644 --- a/epub/style.css +++ b/epub/style.css @@ -30,7 +30,7 @@ pre { line-height: 1.35; margin: 1rem 0; position: relative; - font-size: 80%; + font-size: 70%; white-space: pre-wrap; overflow-wrap: break-word; } @@ -40,10 +40,15 @@ code, pre { } code { - font-size: 90%; + font-size: 80%; padding: 0 2px; } +@media (min-width: 35em) { + pre { font-size: 80%; } + code { font-size: 90%; } +} + h1, h2, h3 { font-family: 'Cinzel', Georgia, serif; font-weight: 700; From 37ff7a5fdf4d1fd467ddc30c9f382974ce58a065 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 7 Mar 2018 12:52:01 +0100 Subject: [PATCH 020/476] Fix typo in Chapter 11 Closes #395 --- 11_async.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/11_async.md b/11_async.md index 149259535..6181d4c45 100644 --- a/11_async.md +++ b/11_async.md @@ -1186,7 +1186,7 @@ plus the added string. But between the time where the statement starts executing and the time where it finishes there's an asynchronous gap. The `map` expression runs before anything has been added to the list, so each of the `+=` -operators starts from an empty string and end up, when its storage +operators starts from an empty string and ends up, when its storage retrieval finishes, setting `list` to a single-line list—the result of adding its line to the empty string. From fbf6a227146e132fe639d2e0f3f58a44372646fb Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 7 Mar 2018 17:23:27 +0100 Subject: [PATCH 021/476] Don't escape arrows in code examples in PDF --- src/render_latex.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/render_latex.js b/src/render_latex.js index 7539bbeeb..89107ed82 100644 --- a/src/render_latex.js +++ b/src/render_latex.js @@ -62,7 +62,7 @@ function escapeIndex(value) { } function escapeComplexScripts(string) { - return string.replace(/[^\u0000-\u0600“”‘’]+/g, m => { + return string.replace(/[^\u0000-\u0600→“”‘’]+/g, m => { if (/[\u0600-\u06ff]/.test(m)) m = "\\textarab{" + m + "}" else if (/[\u4E00-\u9FA5]/.test(m)) m = "\\cjkfont{" + m + "}" return `$<${m}>$` From ac9b2ea707aa19d02d7444a2401cfe71b5cf354a Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 7 Mar 2018 18:01:03 +0100 Subject: [PATCH 022/476] Improve rendering of No Starch LaTeX --- src/render_latex.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/render_latex.js b/src/render_latex.js index 89107ed82..f2d6abcfe 100644 --- a/src/render_latex.js +++ b/src/render_latex.js @@ -31,11 +31,12 @@ function escapeChar(ch) { case "^": return "\\textasciicircum " case "\\": return "\\textbackslash " case "/": return "\\slash " + case '"': return "\\textquotedbl{}" default: return "\\" + ch } } function escape(str) { - return String(str).replace(/[&%$#_{}~^\\]|\w(\/)\w/g, (match, group) => { + return String(str).replace(/[&%$#_{}~^\\"]|\w(\/)\w/g, (match, group) => { if (group) return match[0] + escapeChar(group) + match[2] return escapeChar(match) }) @@ -79,7 +80,10 @@ let linkedChapter = null, raw = false, quote = false let renderer = { fence(token) { if (/\bhidden:\s*true/.test(token.info)) return "" - return `\n\n${id(token)}\\begin{lstlisting}\n${escapeComplexScripts(token.content.trimRight())}\n\\end{lstlisting}\n\\noindent` + if (noStarch) + return `\n\n${id(token)}\\begin{Code}\n${token.content.trimRight()}\n\\end{Code}\n` + else + return `\n\n${id(token)}\\begin{lstlisting}\n${escapeComplexScripts(token.content.trimRight())}\n\\end{lstlisting}\n\\noindent` }, hardbreak() { return "\\break\n" }, @@ -128,7 +132,12 @@ let renderer = { td_open() { return "\n" }, td_close(_, next) { return next && next.type == "td_open" ? " &" : "" }, - code_inline(token) { return `\\lstinline\`${miniEscape(token.content)}\`` }, + code_inline(token) { + if (noStarch) + return `\\texttt{${escape(token.content)}}` + else + return `\\lstinline\`${miniEscape(token.content)}\`` + }, strong_open() { return "\\textbf{" }, strong_close() { return "}" }, From 47cc9eba6c0c0931bef325661913629f344a94fe Mon Sep 17 00:00:00 2001 From: Lukasz Date: Wed, 7 Mar 2018 19:49:41 +0100 Subject: [PATCH 023/476] Add type attribute to tag in epub --- epub/frontmatter.xhtml | 2 +- epub/titlepage.xhtml | 2 +- epub/toc.xhtml.src | 2 +- src/epub_chapter.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/epub/frontmatter.xhtml b/epub/frontmatter.xhtml index ccdd27cc5..255bae289 100644 --- a/epub/frontmatter.xhtml +++ b/epub/frontmatter.xhtml @@ -1,7 +1,7 @@ - + Eloquent JavaScript
ϕ = -
n11n00 - +
n11n00n10n01
n1•n0•n•1n•0 @@ -576,7 +575,7 @@ measurements where the second variable is false. {{index correlation, "phi coefficient"}} So for the pizza table, the part above the division line (the -dividend) would be 1×76 - 4×9 = 40, and the part below it (the +dividend) would be 1×76−4×9 = 40, and the part below it (the divisor) would be the square root of 5×85×10×80, or [√340000]{if html}[[$\sqrt{340000}$]{latex}]{if tex}. This comes out to _ϕ_ ≈ 0.069, which is tiny. Eating ((pizza)) does not appear to have diff --git a/epub/style.css b/epub/style.css index 6c114a997..c03305502 100644 --- a/epub/style.css +++ b/epub/style.css @@ -133,6 +133,17 @@ table { margin-left: 15px; } +sub, sup { + line-height: 1; +} + +sub { + font-size: 60%; +} +sup { + font-size: 70%; +} + /* Syntax highlighting */ .cm-keyword {color: #506;} .cm-atom {color: #106;} diff --git a/html/css/ejs.css b/html/css/ejs.css index 8b9fb3a88..a5ba20f67 100644 --- a/html/css/ejs.css +++ b/html/css/ejs.css @@ -439,3 +439,15 @@ td + td { table { margin-left: 15px; } + +sub, sup { + line-height: 1; +} + +sub { + font-size: 60%; +} + +sup { + font-size: 70%; +} From 1901d502df8ebc92ed50ff152d6b669cf7f7a300 Mon Sep 17 00:00:00 2001 From: Lukasz Date: Sat, 10 Mar 2018 00:49:58 +0100 Subject: [PATCH 031/476] Tweaks to HTML and CSS --- epub/style.css | 5 ++++- html/css/ejs.css | 1 + src/chapter.html | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/epub/style.css b/epub/style.css index c03305502..3fac4a62f 100644 --- a/epub/style.css +++ b/epub/style.css @@ -68,7 +68,6 @@ h3 { div.chap_num { font-family: 'Cinzel', Georgia, serif; - display: block; margin-bottom: -0.8rem; } @@ -144,6 +143,10 @@ sup { font-size: 70%; } +ol li p { + margin: 0; +} + /* Syntax highlighting */ .cm-keyword {color: #506;} .cm-atom {color: #106;} diff --git a/html/css/ejs.css b/html/css/ejs.css index a5ba20f67..c9a446a28 100644 --- a/html/css/ejs.css +++ b/html/css/ejs.css @@ -160,6 +160,7 @@ ol li p { font-size: 60%; color: #aaa; margin-top: -.7em; + display: block; } blockquote { diff --git a/src/chapter.html b/src/chapter.html index 7288df19b..9b6971cb5 100644 --- a/src/chapter.html +++ b/src/chapter.html @@ -23,7 +23,7 @@ <<> -> id="<>"<>><>
Chapter <>
<
><> +> id="<>"<>><>Chapter <><><> <> From 2bf7fdc15d6ee9984d7542e4e06dbc79bd3c039d Mon Sep 17 00:00:00 2001 From: Lukasz Date: Sat, 10 Mar 2018 21:13:17 +0100 Subject: [PATCH 032/476] Remove duplicate words --- 16_game.md | 2 +- 20_node.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/16_game.md b/16_game.md index 4b3a8e44f..63d8e7b6e 100644 --- a/16_game.md +++ b/16_game.md @@ -255,7 +255,7 @@ moving element in our game. All actor objects conform to the same ((interface)). Their `pos` property holds the coordinates of the element's top-left corner, and their `size` property holds its size. -Then they have have an `update` method, which is used to compute their +Then they have an `update` method, which is used to compute their new state and position after a given time step. It simulates the thing the actor does—moving in response to the arrow keys for the player, bouncing back and forth for the lava—and returns a new, updated actor diff --git a/20_node.md b/20_node.md index 7b6619bef..9f3e1145e 100644 --- a/20_node.md +++ b/20_node.md @@ -822,7 +822,7 @@ To avoid such problems, `urlPath` uses the `resolve` function from the `path` module, which resolves relative paths. It then verifies that the result is _below_ the working directory. The `process.cwd` function (where "cwd" stands for "current working directory") can be -used used to find this working directory. When the path doesn't start +used to find this working directory. When the path doesn't start with the base directory, the function throws an error response object, using the HTTP status code that indicates that access to the resource is forbidden. From ed148f300e79e44b3ccb75d560a7af0bdab51191 Mon Sep 17 00:00:00 2001 From: Lukasz Date: Sun, 11 Mar 2018 19:18:37 +0100 Subject: [PATCH 033/476] Remove hints from chapters in e-book --- src/render_html.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/render_html.js b/src/render_html.js index 127406b8f..7fa8ac697 100644 --- a/src/render_html.js +++ b/src/render_html.js @@ -18,6 +18,7 @@ let chapter = /^\d{2}_([^\.]+)/.exec(file) || [null, "hints"] let {tokens, metadata} = transformTokens(require("./markdown").parse(fs.readFileSync(file, "utf8"), {}), { defined: epub ? ["book", "html"] : ["interactive", "html"], + strip: epub ? "hints" : "", takeTitle: true, index: false }) From c2d3e549ee645b42039c1e52caf09a9f38ba5c4e Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 14 Mar 2018 15:32:43 +0100 Subject: [PATCH 034/476] Adjust variable/binding terminology in Chapter 10 --- 10_modules.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/10_modules.md b/10_modules.md index 6ef55a945..ed2da4ecf 100644 --- a/10_modules.md +++ b/10_modules.md @@ -519,9 +519,8 @@ And we can go further. Apart from the number of files, the _size_ of the files also determines how fast they can be transferred over the network. Thus, the JavaScript community has invented _((minifier))s_. These are tools that take a JavaScript program and make it smaller by -automatically removing comments and whitespace, renaming variables, -and replacing pieces of code with equivalent code that take up less -space. +automatically removing comments and whitespace, renaming bindings, and +replacing pieces of code with equivalent code that take up less space. {{index pipeline, tool}} From fe39cebd91ee5ec65ff46fc6d922d84aa3eb6b27 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 15 Mar 2018 16:10:29 +0100 Subject: [PATCH 035/476] Remove superfluous backslash in regexp example Closes #403 --- 09_regexp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/09_regexp.md b/09_regexp.md index c02316b62..aa16382f0 100644 --- a/09_regexp.md +++ b/09_regexp.md @@ -846,7 +846,7 @@ has a special meaning. ``` let name = "dea+hl[]rd"; let text = "This dea+hl[]rd guy is super annoying."; -let escaped = name.replace(/[\\\[.+*?(){|^$]/g, "\\$&"); +let escaped = name.replace(/[\\[.+*?(){|^$]/g, "\\$&"); let regexp = new RegExp("\\b" + escaped + "\\b", "gi"); console.log(text.replace(regexp, "_$&_")); // → This _dea+hl[]rd_ guy is super annoying. From 4a8be796a4017438b131827a0eb27263a2707982 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 16 Mar 2018 10:48:27 +0100 Subject: [PATCH 036/476] Fix mixed up word in Chapter 9 Closes #404 --- 09_regexp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/09_regexp.md b/09_regexp.md index aa16382f0..abe29755e 100644 --- a/09_regexp.md +++ b/09_regexp.md @@ -1033,7 +1033,7 @@ usually called an _INI_ file) are as follows: Our task is to convert a string like this into an object whose properties hold strings for sectionless settings and sub-objects for -settings, with those sub-objects holding the section's settings. +sections, with those sub-objects holding the section's settings. {{index "carriage return", "line break", "newline character"}} From 795537bf836917e9e019688d25bd4d9bbbe778a5 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 16 Mar 2018 19:32:02 +0100 Subject: [PATCH 037/476] Fix typo in Chapter 14 Closes #405 --- 14_dom.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/14_dom.md b/14_dom.md index 4a7129fcf..dd7d9c31e 100644 --- a/14_dom.md +++ b/14_dom.md @@ -453,7 +453,7 @@ if}} Some element ((attribute))s, such as `href` for links, can be accessed through a ((property)) of the same name on the element's ((DOM)) -object. This is the case for a most commonly used standard attributes. +object. This is the case for most commonly used standard attributes. {{index "data attribute", "getAttribute method", "setAttribute method", attribute}} From 0c9c569ca9e9cb7d7fdb15703dd31b1060c5586f Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 20 Mar 2018 16:05:49 +0100 Subject: [PATCH 038/476] Remove incorrect prefix for request function Closes #406 --- 20_node.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/20_node.md b/20_node.md index 9f3e1145e..9ea7f70ce 100644 --- a/20_node.md +++ b/20_node.md @@ -551,7 +551,7 @@ in the `http` module. ``` const {request} = require("http"); -let requestStream = http.request({ +let requestStream = request({ hostname: "eloquentjavascript.net", path: "/20_node.html", method: "GET", @@ -598,7 +598,7 @@ we know from the browser. We have seen two instances of writable streams in the HTTP examples—namely, the response object that the server could write to -and the request object that was returned from `http.request`. +and the request object that was returned from `request`. {{index "callback function", "asynchronous programming", "write method", "end method", "Buffer class"}} From 0e72735c442f4dd02583e060e2596ca346200cc5 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 21 Mar 2018 09:41:26 +0100 Subject: [PATCH 039/476] Clarify exercise in Chapter 9 --- 09_regexp.md | 13 ++++++------- code/solutions/09_1_regexp_golf.js | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/09_regexp.md b/09_regexp.md index abe29755e..69c2d43c7 100644 --- a/09_regexp.md +++ b/09_regexp.md @@ -1248,11 +1248,10 @@ with the way it responds to various input strings. {{index "program size", "code golf", "regexp golf (exercise)"}} -_Code -golf_ is a term used for the game of trying to express a particular -program in as few characters as possible. Similarly, _regexp golf_ is -the practice of writing as tiny a regular expression as possible to -match a given pattern, and _only_ that pattern. +_Code golf_ is a term used for the game of trying to express a +particular program in as few characters as possible. Similarly, +_regexp golf_ is the practice of writing as tiny a regular expression +as possible to match a given pattern, and _only_ that pattern. {{index boundary, matching}} @@ -1269,7 +1268,7 @@ make it any smaller. 4. Any word ending in _ious_ 5. A whitespace character followed by a period, comma, colon, or semicolon 6. A word longer than six letters - 7. A word without the letter _e_ + 7. A word without the letter _e_ (or _E_) Refer to the table in the [chapter summary](regexp#summary_regexp) for help. Test each solution with a few test strings. @@ -1304,7 +1303,7 @@ verify(/.../, verify(/.../, ["red platypus", "wobbling nest"], - ["earth bed", "learning ape"]); + ["earth bed", "learning ape", "BEET"]); function verify(regexp, yes, no) { diff --git a/code/solutions/09_1_regexp_golf.js b/code/solutions/09_1_regexp_golf.js index b1b54155a..f4e5ee1fc 100644 --- a/code/solutions/09_1_regexp_golf.js +++ b/code/solutions/09_1_regexp_golf.js @@ -26,7 +26,7 @@ verify(/\w{7,}/, verify(/\b[^\We]+\b/i, ["red platypus", "wobbling nest"], - ["earth bed", "learning ape"]); + ["earth bed", "learning ape", "BEET"]); function verify(regexp, yes, no) { From 0b2986ee1f1024e188c48a7d9b397cdfc3afa744 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 21 Mar 2018 09:41:46 +0100 Subject: [PATCH 040/476] Integrate edits for Chapter 9 --- 02_program_structure.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/02_program_structure.md b/02_program_structure.md index 504206630..ee129b6c1 100644 --- a/02_program_structure.md +++ b/02_program_structure.md @@ -89,7 +89,7 @@ How does a program keep an internal ((state))? How does it remember things? We have seen how to produce new values from old values, but this does not change the old values, and the new value has to be immediately used or it will dissipate again. To catch and hold values, -JavaScript provides a thing called a _binding_, or _variable_. +JavaScript provides a thing called a _binding_, or _variable_: ``` let caught = 5 * 5; @@ -120,7 +120,7 @@ console.log(ten * ten); When a binding points at a value, that does not mean it is tied to that value forever. The `=` operator can be used at any time on existing bindings to disconnect them from their current value and have -them point to a new one. +them point to a new one: ``` let mood = "light"; @@ -141,7 +141,7 @@ hold on to it or you reattach one of your existing tentacles to it. Let's look at another example. To remember the number of dollars that Luigi still owes you, you create a binding. And then when he pays back -$35, you give this binding a new value. +$35, you give this binding a new value: ``` let luigisDebt = 140; @@ -208,7 +208,7 @@ Words with a special meaning, such as `const`, are _((keyword))s_, and they may not be used as binding names. There are also a number of words that are "reserved for use" in ((future)) versions of JavaScript, which also can't be used as binding names. The full list -of keywords and reserved words is rather long. +of keywords and reserved words is rather long: ```{lang: "text/plain"} break case catch class const continue debugger default @@ -274,14 +274,14 @@ looks, but can be helpful in toy programs and experiments. {{index "JavaScript console", "developer tools", "Node.js", "console.log", output}} -In examples, I used `console.log` to output values. Most JavaScript +In the examples, I used `console.log` to output values. Most JavaScript systems (including all modern web ((browser))s and Node.js) provide a `console.log` function that writes out its arguments to _some_ text output device. In browsers, the output lands in the ((JavaScript console)). This part of the browser interface is hidden by default, -but most browsers open it when you press F12 or, on Mac, when you -press Command-Option-I. If that does not work, search through the -menus for an item named "developer tools" or similar. +but most browsers open it when you press F12 or, on Mac, Command-Option-I. +If that does not work, search through the menus for an item named "developer +tools" or similar. {{if interactive @@ -615,7 +615,7 @@ amount. Many loops follow the pattern seen in the `while` examples. First, a "counter" binding is created to track the progress of the loop. Then -comes a `while` loop, whose test expression usually checks whether the +comes a `while` loop, usually with a test expression that checks whether the counter has reached its end value. At the end of the loop body, the counter is updated to track progress. @@ -623,7 +623,7 @@ counter is updated to track progress. Because this pattern is so common, JavaScript and similar languages provide a slightly shorter and more comprehensive form, the `for` -loop. +loop: ``` for (let number = 0; number <= 12; number = number + 2) { @@ -938,7 +938,7 @@ following triangle: {{index [string, length]}} It may be useful to know that you can find the length of a string by -writing `.length` after it. +writing `.length` after it: ``` let abc = "abc"; @@ -1012,7 +1012,7 @@ number, so you'll have to create an `if`/`else if`/`else` chain. The second version of the program has a straightforward solution and a clever one. The simple way is to add another conditional "branch" to precisely test the given condition. For the clever method, build up a -string containing the word or words to output, and print either this +string containing the word or words to output and print either this word or the number if there is no word, potentially by making good use of the `||` operator. From 7f6b06e3673007b6a482e64376a5f448f6ede3d8 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 21 Mar 2018 13:37:36 +0100 Subject: [PATCH 041/476] Fix bad sentence in Chapter 14 Closes #409 --- 14_dom.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/14_dom.md b/14_dom.md index dd7d9c31e..822bf9068 100644 --- a/14_dom.md +++ b/14_dom.md @@ -1025,7 +1025,7 @@ Add the resulting table to the element with an `id` attribute of {{index "right-aligning", "text-align (CSS)"}} -Once you have this working, right-align cells that containing number +Once you have this working, right-align cells that contain number values by setting their `style.textAlign` property to `"right"`. {{if interactive From 582c2e327739408870bf2720481eedc0d7c4388d Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 22 Mar 2018 10:17:24 +0100 Subject: [PATCH 042/476] Integrate tech editing for Chapter 1 --- 01_values.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/01_values.md b/01_values.md index 8fdc61141..bf565399c 100644 --- a/01_values.md +++ b/01_values.md @@ -257,8 +257,8 @@ Almost anything can be put between quotes, and JavaScript will make a string value out of it. But a few characters are more difficult. You can imagine how putting quotes between quotes might be hard. _Newlines_ (the characters you get when you press Enter) may only be -included when the string is quoted with backtick (`` ` ``). The other -types of strings have to stay on a single line. +included without escaping when the string is quoted with backticks +(`` ` ``). {{index [escaping, "in strings"], "backslash character"}} @@ -308,10 +308,11 @@ numbers. And that's what JavaScript does. But there's a complication: JavaScript's representation uses 16 bits per string element, which can -fit 2^16^ different numbers. But Unicode defines more characters than -that—about twice as many, at this point. So some characters, such as -many emoji, take up two "character positions" in JavaScript strings. -We'll come back to this in [Chapter ?](higher_order#code_units). +describe up to 2^16^ different characters. But Unicode defines more +characters than that—about twice as many, at this point. So some +characters, such as many emoji, take up two "character positions" in +JavaScript strings. We'll come back to this in [Chapter +?](higher_order#code_units). {{index "+ operator", concatenation}} From 76ae6b4bb8156008f67bd2c555fd137f9fcf5461 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 29 Mar 2018 15:40:54 +0200 Subject: [PATCH 043/476] Integrate tech editing for Chapter 2 --- 02_program_structure.md | 36 ++++++++++++++++++------------------ 08_error.md | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/02_program_structure.md b/02_program_structure.md index ee129b6c1..a156482f6 100644 --- a/02_program_structure.md +++ b/02_program_structure.md @@ -136,8 +136,8 @@ console.log(mood); You should imagine bindings as tentacles, rather than boxes. They do not _contain_ values; they _grasp_ them—two bindings can refer to the same value. A program can only access the values that it still has a -hold on. When you need to remember something, you grow a tentacle to -hold on to it or you reattach one of your existing tentacles to it. +reference to. When you need to remember something, you grow a tentacle +to hold on to it or you reattach one of your existing tentacles to it. Let's look at another example. To remember the number of dollars that Luigi still owes you, you create a binding. And then when he pays back @@ -188,23 +188,22 @@ in this book because it has some confusing properties. {{index "const keyword", naming}} The word `const` stands for _((constant))_. It defines a constant -binding, which cannot be made to point at a new thing. This is useful -for bindings that give a name to a value so that you can easily refer -to them later, but which are not going to ever change. +binding, which points at the same value for as long as it lives. This +is useful for bindings that give a name to a value so that you can +easily refer to it later. ## Binding names {{index "underscore character", "dollar sign", [binding, naming]}} -Binding names can be any word that isn't reserved for some other -purpose (such as `let`). Digits can be part of binding names—`catch22` -is a valid name, for example—but the name must not start with a digit. -A binding name may include dollar signs (`$`) or underscores (`_`), but -no other punctuation or special characters. +Binding names can be any word. Digits can be part of binding +names—`catch22` is a valid name, for example—but the name must not +start with a digit. A binding name may include dollar signs (`$`) or +underscores (`_`), but no other punctuation or special characters. {{index syntax, "implements (reserved word)", "interface (reserved word)", "package (reserved word)", "private (reserved word)", "protected (reserved word)", "public (reserved word)", "static (reserved word)", "void operator", "yield (reserved word)", "enum (reserved word)", "reserved word", [binding, naming]}} -Words with a special meaning, such as `const`, are _((keyword))s_, and +Words with a special meaning, such as `let`, are _((keyword))s_, and they may not be used as binding names. There are also a number of words that are "reserved for use" in ((future)) versions of JavaScript, which also can't be used as binding names. The full list @@ -386,7 +385,7 @@ square of the input only if the input is actually a number. ```{test: wrap} let theNumber = Number(prompt("Pick a number")); -if (!isNaN(theNumber)) { +if (!Number.isNaN(theNumber)) { console.log("Your number is the square root of " + theNumber * theNumber); } @@ -399,10 +398,10 @@ of a Boolean expression. The deciding expression is written after the keyword, between ((parentheses)), followed by the statement to execute. -{{index "isNaN function"}} +{{index "Number.isNaN function"}} -The `isNaN` function is a standard JavaScript function that returns -`true` only if the argument it is given is `NaN`. The `Number` +The `Number.isNaN` function is a standard JavaScript function that +returns `true` only if the argument it is given is `NaN`. The `Number` function happens to return `NaN` when you give it a string that doesn't represent a valid number. Thus, the condition translates to "unless `theNumber` is not-a-number, do this". @@ -433,7 +432,7 @@ execution paths. ```{test: wrap} let theNumber = Number(prompt("Pick a number")); -if (!isNaN(theNumber)) { +if (!Number.isNaN(theNumber)) { console.log("Your number is the square root of " + theNumber * theNumber); } else { @@ -489,8 +488,9 @@ console.log(12); That works, but the idea of writing a program is to make something _less_ work, not more. If we needed all even numbers less than 1,000, -this approach would be unworkable. What we need is a way to repeat -some code. This form of control flow is called a _((loop))_: +this approach would be unworkable. What we need is a way to run a +piece of code multiple times. This form of control flow is called a +_((loop))_: {{figure {url: "img/controlflow-loop.svg", alt: "Loop control flow",width: "4cm"}}} diff --git a/08_error.md b/08_error.md index 19b93d49a..635f5633a 100644 --- a/08_error.md +++ b/08_error.md @@ -383,7 +383,7 @@ such values are `null`, `undefined`, or -1. ```{test: no} function promptNumber(question) { let result = Number(prompt(question)); - if (isNaN(result)) return null; + if (Number.isNaN(result)) return null; else return result; } From 05e63fbcb3df88140193afe564cf0898ccef3ab5 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 29 Mar 2018 16:05:03 +0200 Subject: [PATCH 044/476] Integrate editing for chapter 3 --- 03_functions.md | 78 ++++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/03_functions.md b/03_functions.md index a5830d363..9a30aada6 100644 --- a/03_functions.md +++ b/03_functions.md @@ -112,16 +112,16 @@ in the function itself. Each ((binding)) has a _((scope))_, which is the part of the program in which the binding is visible. For bindings defined outside of any function or block, the scope is the whole program—you can refer to -them wherever you want. These are called _global_. +such bindings wherever you want. These are called _global_. {{index "local scope", [binding, local]}} But bindings created for function ((parameter))s or declared inside a -function can only be referenced in that function. These are called -_local_. Every time the function is called, new instances of these +function can only be referenced in that function, so they are known as +_local_ bindings. Every time the function is called, new instances of these bindings are created. This provides some isolation between functions—each function call acts in its own little world (its local -environment), and can often be understood without knowing a lot about +environment) and can often be understood without knowing a lot about what's going on in the global environment. {{index "let keyword", "const keyword", "var keyword"}} @@ -172,7 +172,7 @@ console.log(halve(100)); {{index [nesting, "of functions"], [nesting, "of scope"], scope, "inner function", "lexical scoping"}} -JavaScript distinguishes not just between _global_ and _local_ +JavaScript distinguishes not just _global_ and _local_ bindings. Blocks and functions can be created inside other blocks and functions, producing multiple degrees of locality. @@ -207,8 +207,8 @@ from the outer function. But its local bindings, such as `unit` or In short, each local scope can also see all the local scopes that contain it. The set of bindings visible inside a block is determined -by the place of that block in the program text. All bindings from -blocks _around_ it are visible—both those in blocks that enclose it +by the place of that block in the program text. All bindings defined +in scopes _above_ it are visible—both those in blocks that enclose it and those at the top level of the program. This approach to binding visibility is called _((lexical scoping))_. @@ -216,7 +216,7 @@ visibility is called _((lexical scoping))_. {{index [function, "as value"]}} -Function ((binding))s usually simply act as names for a specific piece +A function ((binding)) usually simply acts as a name for a specific piece of the program. Such a binding is defined once and never changed. This makes it easy to confuse the function and its name. @@ -260,8 +260,8 @@ function square(x) { {{index future, "execution order"}} This is a function _declaration_. The statement defines the binding -`square` and points it at the given function. This is slightly easier -to write, and doesn't require a semicolon after the function. +`square` and points it at the given function. It is slightly easier +to write and doesn't require a semicolon after the function. There is one subtlety with this form of function definition. @@ -273,11 +273,11 @@ function future() { } ``` -This code works, even though the function is defined _below_ the code +The preceding code works, even though the function is defined _below_ the code that uses it. Function declarations are not part of the regular top-to-bottom flow of control. They are conceptually moved to the top of their scope and can be used by all the code in that scope. This is -sometimes useful because it gives us the freedom to order code in a +sometimes useful because it offers the freedom to order code in a way that seems meaningful, without worrying about having to define all functions before they are used. @@ -287,7 +287,7 @@ functions before they are used. There's a third notation for functions, which looks very different from the others. Instead of the `function` keyword, it uses an arrow -(`=>`) made up of equals and greater than characters (not to be +(`=>`) made up of equals and greater-than characters (not to be confused with the greater-than-or-equal operator, which is written `>=`). @@ -303,14 +303,14 @@ const power = (base, exponent) => { {{index [function, body]}} -The arrow comes _after_ the list of parameters, and is followed by the +The arrow comes _after_ the list of parameters and is followed by the function's body. It expresses something like "this input (the ((parameter))s) produces this result (the body)". {{index "curly braces", "square example"}} -When there is only one parameter name, the ((parentheses)) around the -parameter list can be omitted. If the body is a single expression, +When there is only one parameter name, you can omit the ((parentheses)) around the +parameter list. If the body is a single expression, rather than a ((block)) in braces, that expression will be returned from the function. So these two definitions of `square` do the same thing: @@ -389,7 +389,7 @@ the program. The place where the computer stores this context is the _((call stack))_. Every time a function is called, the current context is -stored on top of this "stack". When a function returns, it removes the +stored on top of this stack. When a function returns, it removes the top context from the stack and uses that to continue execution. {{index "infinite loop", "stack overflow", recursion}} @@ -397,7 +397,7 @@ top context from the stack and uses that to continue execution. Storing this stack requires space in the computer's memory. When the stack grows too big, the computer will fail with a message like "out of stack space" or "too much recursion". The following code -illustrates this by asking the computer a really hard question, which +illustrates this by asking the computer a really hard question that causes an infinite back-and-forth between two functions. Rather, it _would_ be infinite, if the computer had an infinite stack. As it is, we will run out of space, or "blow the stack". @@ -441,9 +441,9 @@ accidentally pass the wrong number of arguments to functions. And no one will tell you about it. The upside is that this behavior can be used to allow a function to be -called with different amounts of arguments. For example this `minus` +called with different amounts of arguments. For example, this `minus` function tries to imitate the `-` operator by acting on either one or -two arguments. +two arguments: ``` function minus(a, b) { @@ -468,7 +468,7 @@ will replace the argument when it is not given. {{index "power example"}} For example, this version of `power` makes its second argument -optional. If you don't provide it, it will default to two and the +optional. If you don't provide it, it will default to two, and the function will behave like `square`. ```{test: wrap} @@ -503,13 +503,13 @@ console.log("C", "O", 2); {{index "call stack", "local binding", [function, "as value"], scope}} -The ability to treat functions as values combined with the fact that -local bindings are re-created every time a function is called brings +The ability to treat functions as values, combined with the fact that +local bindings are re-created every time a function is called, brings up an interesting question. What happens to local bindings when the function call that created them is no longer active? The following code shows an example of this. It defines a function, -`wrapValue`, which creates a local binding. It then returns a function +`wrapValue`, that creates a local binding. It then returns a function that accesses and returns this local binding. ``` @@ -541,7 +541,7 @@ ways. {{index "multiplier function"}} With a slight change, we can turn the previous example into a way to -create functions that multiply by an arbitrary amount. +create functions that multiply by an arbitrary amount: ``` function multiplier(factor) { @@ -566,7 +566,7 @@ their body and the environment in which they are created. When called, the function body sees its original environment, not the environment in which the call is made. -In the example, `multiplier` is called, and creates an environment in +In the example, `multiplier` is called and creates an environment in which its `factor` parameter is bound to 2. The function value it returns, which is stored in `twice`, remembers this environment. So when that is called, it multiplies its argument by 2. @@ -576,7 +576,7 @@ when that is called, it multiplies its argument by 2. {{index "power example", "stack overflow", recursion, [function, application]}} It is perfectly okay for a function to call itself, as long as it -doesn't do it so often it overflows the stack. A function that calls +doesn't do it so often that it overflows the stack. A function that calls itself is called _recursive_. Recursion allows some functions to be written in a different style. Take, for example, this alternative implementation of `power`: @@ -604,7 +604,7 @@ exponents to achieve the repeated multiplication. {{index [function, application], efficiency}} But this implementation has one problem: in typical JavaScript -implementations, it's about 3 times slower than the looping version. +implementations, it's about three times slower than the looping version. Running through a simple loop is generally cheaper than calling a function multiple times. @@ -634,13 +634,13 @@ can be paralyzing. Therefore, always start by writing something that's correct and easy to understand. If you're worried that it's too slow—which it usually isn't, since most code simply isn't executed often enough to take any -significant amount of time—you can measure afterwards, and improve it +significant amount of time—you can measure afterwards and improve it if necessary. {{index "branching recursion"}} Recursion is not always just an inefficient alternative to looping. -Some problems are really easier to solve with recursion than with +Some problems really are easier to solve with recursion than with loops. Most often these are problems that require exploring or processing several "branches", each of which might branch out again into even more branches. @@ -652,7 +652,7 @@ Consider this puzzle: by starting from the number 1 and repeatedly either adding 5 or multiplying by 3, an infinite amount of new numbers can be produced. How would you write a function that, given a number, tries to find a sequence of such additions and multiplications that -produce that number? +produces that number? For example, the number 13 could be reached by first multiplying by 3 and then adding 5 twice, whereas the number 15 cannot be reached at @@ -687,7 +687,7 @@ It is okay if you don't see how it works right away. Let's work through it, since it makes for a great exercise in recursive thinking. The inner function `find` does the actual recursing. It takes two -((argument))s, the current number and a string that records how we +((argument))s: The current number and a string that records how we reached this number. If it finds a solution, it returns a string that shows how to get to the target. If no solution can be found starting from this number, it returns `null`. @@ -697,7 +697,7 @@ from this number, it returns `null`. To do this, the function performs one of three actions. If the current number is the target number, the current history is a way to reach that target, so it is returned. If the current number is greater than -the target, there's no sense in further exploring this branch since +the target, there's no sense in further exploring this branch because both adding and multiplying will only make the number bigger, so it returns `null`. And finally, if we're still below the target number, the function tries both possible paths that start from the current @@ -729,7 +729,7 @@ find(1, "1") ``` The indentation indicates the depth of the call stack. The first time -`find` is called it starts by calling itself to explore the solution +`find` is called, it starts by calling itself to explore the solution that starts with `(1 + 5)`. That call will further recurse to explore _every_ continued solution that yields a number less than or equal to the target number. Since it doesn't find one that hits the target, it @@ -737,7 +737,7 @@ returns `null` back to the first call. There the `||` operator causes the call that explores `(1 * 3)` to happen. This search has more luck—its first recursive call, through yet _another_ recursive call, hits upon the target number. That innermost call returns a string, and -each of the `||` operators in the intermediate calls pass that string +each of the `||` operators in the intermediate calls passes that string along, ultimately returning the solution. ## Growing functions @@ -757,7 +757,7 @@ good name for it, and put it into a function. The second way is that you find you need some functionality that you haven't written yet and that sounds like it deserves its own function. -You'll start by naming the function, and you'll then write its body. +You'll start by naming the function, and then you'll write its body. You might even start writing code that uses the function before you actually define the function itself. @@ -878,10 +878,10 @@ number-formatting system that handles fractional numbers, negative numbers, alignment of decimal dots, padding with different characters, and so on. -A useful principle is not to add cleverness unless you are absolutely +A useful principle is to not add cleverness unless you are absolutely sure you're going to need it. It can be tempting to write general "((framework))s" for every bit of functionality you come across. -Resist that urge. You won't get any real work done, you'll just be +Resist that urge. You won't get any real work done—you'll just be writing code that you never use. {{id pure}} @@ -891,7 +891,7 @@ writing code that you never use. Functions can be roughly divided into those that are called for their side effects and those that are called for their return value. (Though -it is definitely also possible to have both side effects and return a +it is definitely also possible to both have side effects and return a value.) {{index reuse}} From bed46bf741d5f9ac54f2705f546d83925a873689 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 29 Mar 2018 16:06:34 +0200 Subject: [PATCH 045/476] Fix typo in Chapter 15 Closes #411 --- 15_event.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15_event.md b/15_event.md index 34adb5ca0..adf7fa0b6 100644 --- a/15_event.md +++ b/15_event.md @@ -939,7 +939,7 @@ document finishes loading, a `"load"` event fires on the window. {{index "balloon (exercise)", "arrow key"}} -Write a page that display a ((balloon)) (using the balloon ((emoji)), +Write a page that displays a ((balloon)) (using the balloon ((emoji)), 🎈). When you press the up arrow, it should inflate (grow) ten percent, and when you press the down arrow, it should deflate (shrink) 10%. From f24754321fe7af8b117d2e942d47b448057671be Mon Sep 17 00:00:00 2001 From: Benjamin Wuethrich Date: Wed, 28 Mar 2018 00:54:16 +0200 Subject: [PATCH 046/476] Remove spurious quotes/commas The Egg program that tests the new `set` function contains extra `",` at the end of three lines, which throws a `SyntaxError`; this commit removes them. --- code/solutions/12_4_fixing_scope.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/solutions/12_4_fixing_scope.js b/code/solutions/12_4_fixing_scope.js index 3c645eb53..1b4c6e723 100644 --- a/code/solutions/12_4_fixing_scope.js +++ b/code/solutions/12_4_fixing_scope.js @@ -15,9 +15,9 @@ specialForms.set = (args, env) => { }; run(` -do(define(x, 4),", - define(setx, fun(val, set(x, val))),", - setx(50),", +do(define(x, 4), + define(setx, fun(val, set(x, val))), + setx(50), print(x)) `); // → 50 From 7df7e50d0c8eb2ce0d139052e84961d611a47f7c Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 30 Mar 2018 19:52:40 +0200 Subject: [PATCH 047/476] Integrate editing for Chapter 4 --- 04_data.md | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/04_data.md b/04_data.md index f632abe7b..8bf8b596b 100644 --- a/04_data.md +++ b/04_data.md @@ -164,11 +164,11 @@ named "x", `value[x]` tries to evaluate the expression `x` and uses the result as the property name. So if you know that the property you are interested in is called -"name", you say `value.name`. If you want to extract the property +_name_, you say `value.name`. If you want to extract the property named by the value held in the binding `i`, you say `value[i]`. Property names can be any string, but the dot notation only works with names that look like valid binding names. So if you want to access a -property named "2" or "John Doe", you must use square brackets: +property named _2_ or _John Doe_, you must use square brackets: `value[2]` or `value["John Doe"]`. The elements in an ((array)) are stored as the array's properties, using @@ -243,7 +243,7 @@ and returning it. These somewhat silly names are the traditional terms for operations on a _((stack))_. A stack, in programming, is a ((data structure)) that allows you to push values into it and pop them out again in the -opposite order, so the thing that was added last is removed first. +opposite order, so that the thing that was added last is removed first. These are common in programming—you might remember the function ((call stack)) from [the previous chapter](functions#stack), which is an instance of the same idea. @@ -284,7 +284,7 @@ console.log(day1.wolf); Inside the braces, there is a list of properties separated by commas. Each property has a name followed by a colon and a value. When an object is written over multiple lines, indenting it like in the -example helps with readability. Properties whose names are not valid +example helps with readability. Properties whose names aren't valid binding names or valid numbers have to be quoted. ``` @@ -457,12 +457,12 @@ the same object, the _contents_ of that object might change. {{index "== operator", [comparison, "of objects"], "deep comparison"}} -When you compare objects with JavaScript's `==` operator it will +When you compare objects with JavaScript's `==` operator, it will produce `true` only if both objects are precisely the same value. Comparing different objects will return `false`, even if they have identical properties. There is no "deep" comparison operation built into JavaScript, which compares objects by contents, but it is -possible to write it yourself (which will be one of the +possible to write it yourself (which is one of the [exercises](data#exercise_deep_compare) at the end of this chapter). ## The lycanthrope's log @@ -559,7 +559,7 @@ if}} (If at this point you're putting the book down to focus on a terrible flashback to 10th grade math class—hold on! I do not intend to torture you with endless pages of cryptic notation—just this one formula for -now. And even with that one, all we do is turn it into JavaScript.) +now. And even with this one, all we do is turn it into JavaScript.) The notation [_n_~01~]{if html}[[$n_{01}$]{latex}]{if tex} indicates the number of measurements where the first variable (squirrelness) is @@ -783,7 +783,7 @@ for (let event of journalEvents(JOURNAL)) { // → peanuts: 0.5902679812 ``` -A-ha! There are two factors whose ((correlation)) is clearly stronger +A-ha! There are two factors with a ((correlation)) that's clearly stronger than the others. Eating ((peanuts)) has a strong positive effect on the chance of turning into a squirrel, whereas brushing his teeth has a significant negative effect. @@ -826,7 +826,7 @@ vanishes into the forest. He is never seen again. {{index [array, methods], method}} Before finishing the chapter, I want to introduce you to a few more -object-related concepts. We'll start by introducing some generally +object-related concepts. I'll start by introducing some generally useful array methods. {{index "push method", "pop method", "shift method", "unshift method"}} @@ -860,7 +860,7 @@ adds it to the front instead of the back of the queue. {{index [array, searching], "indexOf method", "lastIndexOf method"}} To search for a specific value, arrays provide an `indexOf` method. It -goes through the array from the start to the end, and returns the +goes through the array from the start to the end and returns the index at which the requested value was found—or -1 if it wasn't found. To search from the end instead of the start, there's a similar method called `lastIndexOf`. @@ -900,7 +900,7 @@ The `concat` method can be used to glue arrays together to create a new array, similar to what the `+` operator does for strings. The following example shows both `concat` and `slice` in action. It takes an array and an index, and it returns a new array that is a copy of -the original array with the element at the given index removed. +the original array with the element at the given index removed: ``` function remove(array, index) { @@ -912,7 +912,7 @@ console.log(remove(["a", "b", "c", "d", "e"], 2)); ``` If you pass `concat` an argument that is not an array, that value will -be added to the new array as if it was a one-element array. +be added to the new array as if it were a one-element array. ## Strings and their properties @@ -1147,8 +1147,8 @@ console.log(Math.random()); Though computers are deterministic machines—they always react the same way if given the same input—it is possible to have them produce -numbers that appear random. To do this, the machine keeps some hidden -value, and whenever you ask for a new random number, it'll perform +numbers that appear random. To do that, the machine keeps some hidden +value, and whenever you ask for a new random number, it performs complicated computations on this hidden value to create a new value. It stores a new value and returns some number derived from it. That way, it can produce ever new, hard-to-predict numbers in a way that @@ -1197,7 +1197,7 @@ function phi(table) { One of the reasons this function is awkward to read is that we have a binding pointing at our array, but we'd much prefer to have bindings -for the _elements_ of the array. I.e. `let n00 = table[0]`, and so on. +for the _elements_ of the array, that is, `let n00 = table[0]` and so on. Fortunately, there is a succinct way to do this in JavaScript. ``` @@ -1229,14 +1229,14 @@ console.log(name); {{index null, undefined}} Note that if you try to destructure `null` or `undefined`, you get an -error, much like you would if you'd directly try to access a property +error, much as you would if you directly try to access a property of those values. ## JSON {{index [array, representation], [object, representation], "data format"}} -Because properties only grasp their value, rather than containing it, +Because properties only grasp their value, rather than contain it, objects and arrays are stored in the computer's ((memory)) as sequences of bits holding the _((address))es_—the place in memory—of their contents. So an array with another array inside of it consists @@ -1389,7 +1389,7 @@ by writing two separate loops—one for counting up and one for counting down—because the comparison that checks whether the loop is finished needs to be `>=` rather than `<=` when counting downward. -It might also be worthwhile to use a different default step, namely, +It might also be worthwhile to use a different default step, namely -1, when the end of the range is smaller than the start. That way, `range(5, 2)` returns something meaningful, rather than getting stuck in an ((infinite loop)). It is possible to refer to previous @@ -1437,9 +1437,9 @@ if}} There are two obvious ways to implement `reverseArray`. The first is to simply go over the input array from front to back and use the `unshift` method on the new array to insert each element at its start. -The second is to loop over the input array backward and use the `push` -method. Iterating over an array backward requires a (somewhat awkward) -`for` specification like `(let i = array.length - 1; i >= 0; i--)`. +The second is to loop over the input array backwards and use the `push` +method. Iterating over an array backwards requires a (somewhat awkward) +`for` specification, like `(let i = array.length - 1; i >= 0; i--)`. {{index "slice method"}} @@ -1500,7 +1500,7 @@ original list is also still a valid three-element list. Write a function `arrayToList` that builds up a list structure like the one shown when given `[1, 2, 3]` as argument. Also write a -`listToArray` function that produces an array from a list. Then, add a +`listToArray` function that produces an array from a list. Then add a helper function `prepend`, which takes an element and a list and creates a new list that adds the element to the front of the input list, and `nth`, which takes a list and a number and returns the @@ -1532,7 +1532,7 @@ if}} {{index "list (exercise)", "linked list"}} Building up a list is easier when done back to front. So `arrayToList` -could iterate over the array backward (see previous exercise) and, for +could iterate over the array backwards (see previous exercise) and, for each element, add an object to the list. You can use a local binding to hold the part of the list that was built so far and use an assignment like `list = {value: X, rest: list}` to add an element. @@ -1570,10 +1570,10 @@ hint}} {{index "deep comparison (exercise)", comparison, "deep comparison", "== operator"}} -The `==` operator compares objects by identity. But sometimes, you -would prefer to compare the values of their actual properties. +The `==` operator compares objects by identity. But sometimes you'd +prefer to compare the values of their actual properties. -Write a function, `deepEqual`, that takes two values and returns true +Write a function `deepEqual` that takes two values and returns true only if they are the same value or are objects with the same properties, where the values of the properties are equal when compared with a recursive call to `deepEqual`. From ba3a7fa4ca69fdc495a2331c6ae25ffb4f5181fd Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 3 Apr 2018 11:19:33 +0200 Subject: [PATCH 048/476] Integrate editing for Chapter 5 --- 05_higher_order.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/05_higher_order.md b/05_higher_order.md index b39759c85..c8764cc13 100644 --- a/05_higher_order.md +++ b/05_higher_order.md @@ -41,7 +41,7 @@ find. {{index "summing example"}} Let's briefly go back to the final two example programs in the -introduction. The first is self-contained and six lines long. +introduction. The first is self-contained and six lines long: ``` let total = 0, count = 1; @@ -52,7 +52,7 @@ while (count <= 10) { console.log(total); ``` -The second relies on two external functions and is one line long. +The second relies on two external functions and is one line long: ``` console.log(sum(range(1, 10))); @@ -195,7 +195,7 @@ console.log(labels); {{index "loop body", "curly braces"}} This is structured a little like a `for` loop—it first describes the -kind of loop, and then gives a body. However, the body is now written +kind of loop and then provides a body. However, the body is now written as a function value, which is wrapped in the ((parentheses)) of the call to `repeat`. This is why it has to be closed with the closing brace _and_ closing parenthesis. In cases like this example, where the @@ -282,7 +282,7 @@ Cyrillic, or Arabic. Remember ((Unicode)) from [Chapter ?](values#unicode), the system that assigns a number to each character in written language. Most of these characters are associated with a specific script. The standard -contains 140 different scripts. 81 of which are still in use today, 59 +contains 140 different scripts—81 are still in use today, and 59 are historic. Though I can only fluently read Latin characters, I appreciate the @@ -326,7 +326,7 @@ The `ranges` property contains an array of Unicode character ((range))s, each of which is a two-element array containing a lower and upper bound. Any character codes within these ranges are assigned to the script. The lower ((bound)) is inclusive (code 994 is a Coptic -character) and the upper bound non-inclusive (code 1008 isn't). +character), and the upper bound non-inclusive (code 1008 isn't). ## Filtering arrays @@ -334,7 +334,7 @@ character) and the upper bound non-inclusive (code 1008 isn't). To find the scripts in the data set that are still in use, the following function might be helpful. It filters out the elements in an -array that don't pass a test. +array that don't pass a test: ``` function filter(array, test) { @@ -425,7 +425,7 @@ number zero and, for each element, add that to the sum. The parameters to `reduce` are, apart from the array, a combining function and a start value. This function is a little less -straightforward than `filter` and `map`, so look closely. +straightforward than `filter` and `map`, so look closely: ``` function reduce(array, combine, start) { @@ -477,13 +477,13 @@ list of the reducer function. The second call to `reduce` then uses this to find the largest script by repeatedly comparing two scripts and returning the larger one. -The Han script has over 89 thousand characters assigned to it in the +The Han script has over 89,000 characters assigned to it in the Unicode standard, making it by far the biggest writing system in the data set. Han is a script (sometimes) used for Chinese, Japanese, and Korean text. Those languages share a lot of characters, though they -tend to write them differently. The (US based) Unicode Consortium +tend to write them differently. The (US-based) Unicode Consortium decided to treat them as a single writing system in order to save -character codes. This is called "Han unification" and still makes some +character codes. This is called _Han unification_ and still makes some people very angry. ## Composability @@ -605,7 +605,7 @@ But how do we get the character codes in a string? In [Chapter ?](values) I mentioned that JavaScript ((string))s are encoded as a sequence of 16-bit numbers. These are called _((code unit))s_. A ((Unicode)) ((character)) code was initially supposed to -fit within such a unit (which gives you a little over 65 thousand +fit within such a unit (which gives you a little over 65,000 characters). When it became clear that wasn't going to be enough, many people balked at the need to use more memory per character. To address these concerns, ((UTF-16)), the format used by JavaScript strings, was @@ -680,7 +680,7 @@ units), you can use `codePointAt(0)` to get its code. We have a `characterScript` function and a way to correctly loop over characters. The next step would be to count the characters that belong to each script. The following counting abstraction will be useful -there. +there: ```{includeCode: strip_log} function countBy(items, groupName) { @@ -751,7 +751,7 @@ To be able to compute ((percentage))s, we first need the total amount of characters that belong to a script, which we can compute with `reduce`. If no such characters are found, the function returns a specific string. Otherwise, it transforms the counting entries into -readable strings with `map`, and then combine them with `join`. +readable strings with `map` and then combines them with `join`. ## Summary @@ -796,9 +796,9 @@ if}} Write a higher-order function `loop` that provides something like a `for` loop statement. It takes a value, a test function, an update function, and a body function. Each iteration, it first runs the test -function on the current loop value, and stops if that returns false. +function on the current loop value and stops if that returns false. Then it calls the body function, giving it the current value. And -finally, it calls the update function to create a new value, and +finally, it calls the update function to create a new value and starts from the beginning. When defining the function, you can use a regular loop to do the @@ -859,8 +859,8 @@ function returns false. If the loop runs to its end without finding such an element, we know that all elements matched and we should return true. -To build `every` on top of `some`, we can apply "((De Morgan's -laws))", which state that `a && b` equals `!(!a || !b)`. This can be +To build `every` on top of `some`, we can apply _((De Morgan's +laws))_, which state that `a && b` equals `!(!a || !b)`. This can be generalized to arrays, where all elements in the array match if there is no element in the array that does not match. @@ -878,7 +878,7 @@ or `"ttb"` (top-to-bottom). {{index "characterScript function", "countBy function"}} The dominant direction is the direction of a majority of the -characters which have a script associated with them. The +characters that have a script associated with them. The `characterScript` and `countBy` functions defined earlier in the chapter are probably useful here. @@ -902,7 +902,7 @@ if}} Your solution might look a lot like the first half of the `textScripts` example. You again have to count characters by a -criteria based on `characterScript`, and then filter out the part of +criterion based on `characterScript`, and then filter out the part of the result that refers to uninteresting (script-less characters). {{index "reduce method"}} From 4ee19d9ec3ca463626a9ae1ce7cce50b592840d3 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 3 Apr 2018 11:36:00 +0200 Subject: [PATCH 049/476] Integrate editing for Chapter 6 --- 06_object.md | 56 ++++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/06_object.md b/06_object.md index 246f80d3f..879546b87 100644 --- a/06_object.md +++ b/06_object.md @@ -27,7 +27,7 @@ can be applied in JavaScript. {{index encapsulation, isolation, modularity}} The core idea in object-oriented programming is to divide programs -into smaller pieces, and make each piece responsible for managing its +into smaller pieces and make each piece responsible for managing its own state. This way, some knowledge about the way a piece of the program works @@ -47,13 +47,13 @@ implementation. Such program pieces are modeled using ((object))s. Their interface consists of a specific set of ((method))s and properties. Properties -that are part of the interface are called _public_. The others, that +that are part of the interface are called _public_. The others, which outside code should not be touching, are called _private_. {{index "underscore character"}} Many languages provide a way to distinguish public and private -properties, and will prevent outside code from accessing the private +properties and will prevent outside code from accessing the private ones altogether. JavaScript, once again taking the minimalist approach, does not. Not yet, at least—there is work underway to add this to the language. @@ -115,7 +115,7 @@ hungryRabbit.speak("I could use a carrot right now."); You can think of `this` as an extra ((parameter)) that is passed in a different way. If you want to pass it explicitly, you can use a function's `call` method, which takes the `this` value as first -argument, and treats further arguments as normal parameters. +argument and treats further arguments as normal parameters. ``` speak.call(hungryRabbit, "Burp!"); @@ -129,9 +129,9 @@ scope in a regular function defined with the `function` keyword. {{index this, "arrow function"}} Arrow functions are different—they do not bind their own `this`, but -can see the `this` binding of the scope around them. Thus you can do +can see the `this` binding of the scope around them. Thus, you can do something like the following code, which references `this` from inside -a local function. +a local function: ``` function normalize() { @@ -205,7 +205,7 @@ It provides a few ((method))s that show up in all objects, such as {{index inheritance, "Function prototype", "Array prototype", "Object prototype"}} Many objects don't directly have `Object.prototype` as their -((prototype)), but instead have another object, which provides its own +((prototype)), but instead have another object that provides a different set of default properties. Functions derive from `Function.prototype`, and arrays derive from `Array.prototype`. @@ -330,7 +330,7 @@ It is important to understand the distinction between the way a prototype is associated with a constructor (through its `prototype` property) and the way objects _have_ a prototype (which can be found with `Object.getPrototypeOf`). The actual prototype of a constructor -is `Function.prototype` since constructors are functions. Its +is `Function.prototype`, since constructors are functions. Its `prototype` _property_ holds the prototype used for instances created through it. @@ -422,12 +422,12 @@ itself can be looked up. Overriding properties that exist in a prototype can be a useful thing to do. As the rabbit teeth example shows, it can be used to express exceptional properties in instances of a more generic class of -objects, while letting the nonexceptional objects simply take a +objects, while letting the nonexceptional objects take a standard value from their prototype. {{index "toString method", "Array prototype", "Function prototype"}} -It is also used to give the standard function and array prototypes a +Overriding is also used to give the standard function and array prototypes a different `toString` method than the basic object prototype. ``` @@ -444,7 +444,7 @@ Calling `toString` on an array gives a result similar to calling `.join(",")` on it—it puts commas between the values in the array. Directly calling `Object.prototype.toString` with an array produces a different string. That function doesn't know about arrays, so it -simply puts the word "object" and the name of the type between square +simply puts the word _object_ and the name of the type between square brackets. ``` @@ -485,9 +485,9 @@ toString in our map. Yet, because plain objects derive from {{index "Object.create function", prototype}} As such, using plain objects as maps is dangerous. There are several -possible ways to avoid this problem. Firstly, it is possible to create +possible ways to avoid this problem. First, it is possible to create objects with _no_ prototype. If you pass `null` to `Object.create`, -the resulting object will not derive from `Object.prototype`, and can +the resulting object will not derive from `Object.prototype` and can safely be used as a map. ``` @@ -502,7 +502,7 @@ use an object as your map. {{index "Map class"}} Fortunately, JavaScript comes with a class called `Map` that is -written for this exact purpose. It stores a mapping, and allows any +written for this exact purpose. It stores a mapping and allows any type of keys. ``` @@ -583,7 +583,7 @@ to know what symbols are. ## Symbols It is possible for multiple interfaces to use the same property name -for different things. For example I could define an interface in which +for different things. For example, I could define an interface in which the `toString` method is supposed to convert the object into a piece of yarn. It would not be possible for an object to conform to both that interface and the standard use of `toString`. @@ -710,7 +710,7 @@ class Matrix { ``` The class stores its content in a single array of _width_ × _height_ -elements. The elements are stored row-by-row, so for example the third +elements. The elements are stored row-by-row, so, for example, the third element in the fifth row is (using zero-based indexing) stored at position 4 × _width_ + 2. @@ -752,7 +752,7 @@ class MatrixIterator { The class tracks the progress of iterating over a matrix in its `x` and `y` properties. The `next` method starts by checking whether the bottom of the matrix has been reached. If it hasn't, it _first_ -creates the object holding the current value, and _then_ updates its +creates the object holding the current value and _then_ updates its position, moving to the next row if necessary. Let us set up the `Matrix` class to be iterable. Throughout this book, @@ -790,7 +790,7 @@ for (let {x, y, value} of matrix) { Interfaces often consist mostly of methods, but it is also okay to include properties that hold non-function values. For example, `Map` objects have a `size` property that tells you how many keys are stored -in it. +in them. It is not even necessary for such an object to compute and store such a property directly in the instance. Even properties that are accessed @@ -851,7 +851,7 @@ in the `fahrenheit` getter and setter. Sometimes you want to attach some properties directly to your constructor function, rather than to the prototype. Such methods won't -have access to a class instance, but can for example be used to +have access to a class instance but can, for example, be used to provide additional ways to create instances. Inside a class declaration, methods that have `static` written before @@ -864,11 +864,11 @@ temperature using degrees Fahrenheit. {{index inheritance, "matrix example", "object-oriented programming", "SymmetricMatrix class"}} Some matrices are known to be _symmetric_. If you mirror a symmetric -matrix around its top-left to bottom-right diagonal, it stays the +matrix around its top-left-to-bottom-right diagonal, it stays the same. In other words, the value stored at _x_,_y_ is always the same as that at _y_,_x_. -Imagine we need a data structure like `Matrix`, but one which enforces +Imagine we need a data structure like `Matrix` but one that enforces the fact that the matrix is and remains symmetrical. We could write it from scratch, but that would involve repeating some code very similar to what we already wrote. @@ -878,7 +878,7 @@ to what we already wrote. JavaScript's prototype system makes it possible to create a _new_ class, much like the old class, but with new definitions for some of its properties. The prototype for the new class derives from the old -prototype, but adds a new definition for, say, the `set` method. +prototype but adds a new definition for, say, the `set` method. In object-oriented programming terms, this is called _((inheritance))_. The new class inherits properties and behavior from @@ -921,7 +921,7 @@ diagonal. The `set` method again uses `super`, but this time not to call the constructor, but to call a specific method from the superclass' set of -methods. We are redefining `set`, but do want to use the original +methods. We are redefining `set` but do want to use the original behavior. Because `this.set` refers to the _new_ `set` method, calling that wouldn't work. Inside class methods, `super` provides a way to call methods as they were defined in the superclass. @@ -966,7 +966,7 @@ console.log([1] instanceof Array); {{index inheritance}} -The operator will see through inherited types so a `SymmetricMatrix` +The operator will see through inherited types, so a `SymmetricMatrix` is an instance of `Matrix`. The operator can also be applied to standard constructors like `Array`. Almost every object is an instance of `Object`. @@ -1004,7 +1004,7 @@ different objects that provide the interface. This is called _polymorphism_. When implementing multiple classes that differ in only some details, -it can be helpful to write the new classes as _subclass_ of an +it can be helpful to write the new classes as _subclasses_ of an existing class, _inheriting_ part of its behavior. ## Exercises @@ -1140,7 +1140,7 @@ members with the newly filtered version of the array. {{index "for/of loop", "iterable interface"}} The `from` method can use a `for`/`of` loop to get the values out of -the iterable object, and call `add` to put them into a newly created +the iterable object and call `add` to put them into a newly created group. hint}} @@ -1157,7 +1157,7 @@ you aren't clear on the exact form of the interface anymore. If you used an array to represent the group's members, don't just return the iterator created by calling the `Symbol.iterator` method on -the array. That would work, but defeats the purpose of this exercise. +the array. That would work, but it defeats the purpose of this exercise. It is okay if your iterator behaves strangely when the group is modified during iteration. @@ -1187,7 +1187,7 @@ position in the group. Every time `next` is called, it checks whether it is done, and if not, moves past the current value and returns it. The `Group` class itself gets a method named by `Symbol.iterator` -which, when called, returns a new instance of the iterator class for +that, when called, returns a new instance of the iterator class for that group. hint}} From 13803991467900530cafaf8987d76f3522524e4f Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 3 Apr 2018 12:10:04 +0200 Subject: [PATCH 050/476] Integrate technical editing for Chapter 3 --- 03_functions.md | 52 +++++++++++++++++++++++++------------------------ 12_language.md | 4 ++-- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/03_functions.md b/03_functions.md index 9a30aada6..133517cb1 100644 --- a/03_functions.md +++ b/03_functions.md @@ -98,14 +98,14 @@ cause the function to return `undefined`. Functions that don't have a `return` statement at all, such as `makeNoise`, similarly return `undefined`. -## Parameters and scopes - {{index parameter, [function, application], [binding, "from parameter"]}} Parameters to a function behave like regular bindings, but their initial values are given by the _caller_ of the function, not the code in the function itself. +## Bindings and scopes + {{indexsee "top-level scope", "global scope"}} {{index "var keyword", "global scope", [binding, global], [binding, "scope of"]}} @@ -164,6 +164,8 @@ const halve = function(n) { let n = 10; console.log(halve(100)); // → 50 +console.log(n); +// → 10 ``` {{id scoping}} @@ -207,10 +209,10 @@ from the outer function. But its local bindings, such as `unit` or In short, each local scope can also see all the local scopes that contain it. The set of bindings visible inside a block is determined -by the place of that block in the program text. All bindings defined -in scopes _above_ it are visible—both those in blocks that enclose it -and those at the top level of the program. This approach to binding -visibility is called _((lexical scoping))_. +by the place of that block in the program text. Each local scope can +also see all the local scopes that contain it, and all scopes can see +the global scope. This approach to binding visibility is called +_((lexical scoping))_. ## Functions as values @@ -226,8 +228,8 @@ But the two are different. A function value can do all the things that other values can do—you can use it in arbitrary ((expression))s, not just call it. It is possible to store a function value in a new binding, pass it as an argument to a function, and so on. Similarly, a -binding that holds a function is still just a regular binding and can -be assigned a new value, like so: +binding that holds a function is still just a regular binding and can, +if not constant, be assigned a new value, like so: ```{test: no} let launchMissiles = function() { @@ -370,13 +372,13 @@ returns, the program reaches its end. We could show the flow of control schematically like this: ```{lang: null} -top - greet - console.log - greet -top - console.log -top +not in function + in greet + in console.log + in greet +not in function + in console.log +not in function ``` {{index "return keyword", memory}} @@ -390,7 +392,7 @@ the program. The place where the computer stores this context is the _((call stack))_. Every time a function is called, the current context is stored on top of this stack. When a function returns, it removes the -top context from the stack and uses that to continue execution. +top context from the stack and uses that context to continue execution. {{index "infinite loop", "stack overflow", recursion}} @@ -460,15 +462,14 @@ console.log(minus(10, 5)); {{id power}} {{index "optional argument", "default value", parameter, "= operator"}} -Often, when a function allows you to omit some arguments, those will -get default values when not given. If you write an `=` operator after +If you write an `=` operator after a parameter, followed by an expression, the value of that expression will replace the argument when it is not given. {{index "power example"}} For example, this version of `power` makes its second argument -optional. If you don't provide it, it will default to two, and the +optional. If you don't provide it or pass the value `undefined`, it will default to two, and the function will behave like `square`. ```{test: wrap} @@ -533,7 +534,7 @@ different calls can't trample on one another's local bindings. This feature—being able to reference a specific instance of a local binding in an enclosing scope—is called _((closure))_. A function that -_closes over_ some local bindings is called _a_ closure. This behavior +references bindings from local scopes around it is called _a_ closure. This behavior not only frees you from having to worry about lifetimes of bindings but also makes it possible to use function values in some creative ways. @@ -563,8 +564,8 @@ needed since a parameter is itself a local binding. Thinking about programs like this takes some practice. A good mental model is to think of function values as containing both the code in their body and the environment in which they are created. When called, -the function body sees its original environment, not the environment -in which the call is made. +the function body sees the environment in which it was created, not the +environment in which it is called. In the example, `multiplier` is called and creates an environment in which its `factor` parameter is bound to 2. The function value it @@ -779,7 +780,8 @@ always three digits long. 011 Chickens ``` -This asks for a function of two arguments. Let's get coding. +This asks for a function of two arguments—the number of cows and the +number of chickens. Let's get coding. ``` function printFarmInventory(cows, chickens) { @@ -935,7 +937,7 @@ and give it a function as its value. Arrow functions are yet another way to create functions. ``` -// Create a function value f +// Define f to hold a function value const f = function(a) { console.log(a + 2); }; @@ -1104,6 +1106,6 @@ variable. Once the loop has finished, the counter can be returned. {{index "local binding"}} Take care to make all the bindings used in the function _local_ to the -function by using the `let` keyword. +function by properly declaring them with the `let` or `const` keyword. hint}} diff --git a/12_language.md b/12_language.md index a68daf442..9342ea93b 100644 --- a/12_language.md +++ b/12_language.md @@ -743,7 +743,7 @@ hint}} {{index closure, [function, scope], "closure in egg (exercise)"}} -The way we have defined `fun` allows functions in Egg to "close over" +The way we have defined `fun` allows functions in Egg to reference the surrounding scope, allowing the function's body to use local values that were visible at the time the function was defined, just like JavaScript functions do. @@ -771,7 +771,7 @@ mechanism causes this to work. Again, we are riding along on a JavaScript mechanism to get the equivalent feature in Egg. Special forms are passed the local scope in which they are evaluated so that they can evaluate their subforms in -that scope. The function returned by `fun` closes over the `scope` +that scope. The function returned by `fun` has access to the `scope` argument given to its enclosing function and uses that to create the function's local ((scope)) when it is called. From 23cb41f25d5ccd2259467579cc3b0c8c1e0d2059 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 3 Apr 2018 12:22:30 +0200 Subject: [PATCH 051/476] Clarify window object in Chapter 15 Closes #413 --- 15_event.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/15_event.md b/15_event.md index adf7fa0b6..6049b8917 100644 --- a/15_event.md +++ b/15_event.md @@ -52,20 +52,24 @@ functions as _handlers_ for specific events. ``` -{{index "click event", "addEventListener method"}} +{{index "click event", "addEventListener method", "window object"}} -The `addEventListener` method registers its second argument to be -called whenever the event described by its first argument occurs. +The `window` binding refers to a built-in object provided by the +browser. It represents the ((browser)) window that contains the +document. Calling its `addEventListener` method registers the second +argument to be called whenever the event described by its first +argument occurs. ## Events and DOM nodes -{{index "addEventListener method", "event handling"}} +{{index "addEventListener method", "event handling", "window object"}} Each ((browser)) event handler is registered in a context. We called -`addEventListener` on the `window` object before. This method can also -be found on ((DOM)) elements and some other types of objects. Event -listeners are only called when the event happens in the context of the -object they are registered on. +`addEventListener` on the `window` object before to register a handler +for the whole window. Such a method can also be found on ((DOM)) +elements and some other types of objects. Event listeners are only +called when the event happens in the context of the object they are +registered on. ```{lang: "text/html"} From 64744083ebdf9a5a39d1d0966299dbda4830fa78 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 3 Apr 2018 12:29:46 +0200 Subject: [PATCH 052/476] Fix reset sandbox shortcut in code snippets Closes #414 --- html/js/ejs.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/html/js/ejs.js b/html/js/ejs.js index 2f2497765..275d6863d 100644 --- a/html/js/ejs.js +++ b/html/js/ejs.js @@ -69,7 +69,8 @@ window.addEventListener("load", () => { "Ctrl-Enter"(cm) { runCode(cm.state.context) }, "Cmd-Enter"(cm) { runCode(cm.state.context) }, "Ctrl-`"(cm) { closeCode(cm.state.context) }, - "Ctrl-Q": resetSandbox + "Ctrl-X"(cm) { resetSandbox(cm.state.context.sandbox) }, + "Cmd-X"(cm) { resetSandbox(cm.state.context.sandbox) } } let nextID = 0 @@ -130,9 +131,9 @@ window.addEventListener("load", () => { function openMenu(data, node) { let menu = elt("div", {"class": "sandbox-open-menu"}) - let items = [["Run code (ctrl-enter)", () => runCode(data)], + let items = [["Run code (ctrl/cmd-enter)", () => runCode(data)], ["Revert to original code", () => revertCode(data)], - ["Reset sandbox (ctrl-q)", () => resetSandbox(data.sandbox)]] + ["Reset sandbox (ctrl/cmd-x)", () => resetSandbox(data.sandbox)]] if (!data.isHTML || !data.sandbox) items.push(["Deactivate editor (ctrl-`)", () => { closeCode(data) }]) items.forEach(choice => menu.appendChild(elt("div", choice[0]))) @@ -206,7 +207,6 @@ window.addEventListener("load", () => { } function resetSandbox(name) { - name = name || "null" if (!sandboxes.hasOwnProperty(name)) return let frame = sandboxes[name].frame frame.parentNode.removeChild(frame) From c7be580c9cc599c3b7ca93448876bf7411cb6247 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 3 Apr 2018 15:50:45 +0200 Subject: [PATCH 053/476] Add chapter illustrations for 6-11 --- 01_values.md | 2 +- 02_program_structure.md | 2 +- 03_functions.md | 2 +- 04_data.md | 2 +- 06_object.md | 2 ++ 07_robot.md | 6 +++++- 08_error.md | 2 ++ 09_regexp.md | 6 +++++- 10_modules.md | 6 +++++- 11_async.md | 2 ++ html/css/ejs.css | 5 +++++ img/chapter_picture_1.jpg | Bin 70056 -> 62684 bytes img/chapter_picture_10.jpg | Bin 0 -> 33013 bytes img/chapter_picture_11.jpg | Bin 0 -> 24098 bytes img/chapter_picture_2.jpg | Bin 43214 -> 34739 bytes img/chapter_picture_3.jpg | Bin 59405 -> 49660 bytes img/chapter_picture_4.jpg | Bin 31773 -> 23307 bytes img/chapter_picture_5.jpg | Bin 32555 -> 26086 bytes img/chapter_picture_6.jpg | Bin 0 -> 27982 bytes img/chapter_picture_7.jpg | Bin 0 -> 20758 bytes img/chapter_picture_8.jpg | Bin 0 -> 15702 bytes img/chapter_picture_9.jpg | Bin 0 -> 26842 bytes 22 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 img/chapter_picture_10.jpg create mode 100644 img/chapter_picture_11.jpg create mode 100644 img/chapter_picture_6.jpg create mode 100644 img/chapter_picture_7.jpg create mode 100644 img/chapter_picture_8.jpg create mode 100644 img/chapter_picture_9.jpg diff --git a/01_values.md b/01_values.md index bf565399c..1403e3001 100644 --- a/01_values.md +++ b/01_values.md @@ -13,7 +13,7 @@ quote}} {{index "Yuan-Ma", "Book of Programming"}} -{{figure {url: "img/chapter_picture_1.jpg", alt: "A sea of bits", chapter: framed}}} +{{figure {url: "img/chapter_picture_1.jpg", alt: "Picture of a sea of bits", chapter: framed}}} {{index "binary data", data, bit, memory}} diff --git a/02_program_structure.md b/02_program_structure.md index a156482f6..5294165a0 100644 --- a/02_program_structure.md +++ b/02_program_structure.md @@ -11,7 +11,7 @@ quote}} {{index why, "Poignant Guide"}} -{{figure {url: "img/chapter_picture_2.jpg", alt: "Tentacles holding objects", chapter: framed}}} +{{figure {url: "img/chapter_picture_2.jpg", alt: "Picture of tentacles holding objects", chapter: framed}}} In this chapter, we start to do things that can actually be called _programming_. We will expand our command of the JavaScript language diff --git a/03_functions.md b/03_functions.md index 133517cb1..483ac64ef 100644 --- a/03_functions.md +++ b/03_functions.md @@ -10,7 +10,7 @@ quote}} {{index "Knuth, Donald"}} -{{figure {url: "img/chapter_picture_3.jpg", alt: "Fern leaves with a fractal shape", chapter: framed}}} +{{figure {url: "img/chapter_picture_3.jpg", alt: "Picture of fern leaves with a fractal shape", chapter: framed}}} {{index function, "code structure"}} diff --git a/04_data.md b/04_data.md index 8bf8b596b..45239ee49 100644 --- a/04_data.md +++ b/04_data.md @@ -13,7 +13,7 @@ quote}} {{index "Babbage, Charles"}} -{{figure {url: "img/chapter_picture_4.jpg", alt: "A weresquirrel", chapter: framed}}} +{{figure {url: "img/chapter_picture_4.jpg", alt: "Picture of a weresquirrel", chapter: framed}}} {{index object, "data structure"}} diff --git a/06_object.md b/06_object.md index 879546b87..afbd9d5a7 100644 --- a/06_object.md +++ b/06_object.md @@ -12,6 +12,8 @@ quote}} {{index "Liskov, Barbara", "abstract data type"}} +{{figure {url: "img/chapter_picture_6.jpg", alt: "Picture of a rabbit with its proto-rabbit", chapter: framed}}} + [Chapter ?](data) introduced JavaScript's ((object))s. In programming culture, we have a thing called _((object-oriented programming))_, a set of techniques that uses objects (and related concepts) as the diff --git a/07_robot.md b/07_robot.md index 4445dc973..92270eb3f 100644 --- a/07_robot.md +++ b/07_robot.md @@ -9,7 +9,11 @@ relevant as the question of whether Submarines Can Swim. quote}} -{{index "artificial intelligence", "Dijkstra, Edsger", "project chapter", "reading code", "writing code"}} +{{index "artificial intelligence", "Dijkstra, Edsger"}} + +{{figure {url: "img/chapter_picture_7.jpg", alt: "Picture of a package-delivery robot", chapter: framed}}} + +{{index "project chapter", "reading code", "writing code"}} In "project" chapters, I'll stop pummeling you with new theory for a brief moment and instead we'll work through a program together. Theory diff --git a/08_error.md b/08_error.md index 635f5633a..0d22b5377 100644 --- a/08_error.md +++ b/08_error.md @@ -10,6 +10,8 @@ definition, not smart enough to debug it. quote}} +{{figure {url: "img/chapter_picture_8.jpg", alt: "Picture of a collection of bugs", chapter: framed}}} + {{index "Kernighan, Brian", "Plauger, P.J.", debugging, "error handling"}} Flaws in computer programs are usually called _((bug))s_. It makes diff --git a/09_regexp.md b/09_regexp.md index 69c2d43c7..5973713c7 100644 --- a/09_regexp.md +++ b/09_regexp.md @@ -7,6 +7,8 @@ regular expressions.' Now they have two problems. quote}} +{{index "Zawinski, Jamie"}} + {{if interactive {{quote {author: "Master Yuan-Ma", title: "The Book of Programming", chapter: true} @@ -19,7 +21,9 @@ quote}} if}} -{{index "Zawinski, Jamie", evolution, adoption, integration}} +{{figure {url: "img/chapter_picture_9.jpg", alt: "A railroad diagram", chapter: "square-framed"}}} + +{{index evolution, adoption, integration}} Programming ((tool))s and techniques survive and spread in a chaotic, evolutionary way. It's not always the pretty or brilliant ones that diff --git a/10_modules.md b/10_modules.md index ed2da4ecf..5787c3c8f 100644 --- a/10_modules.md +++ b/10_modules.md @@ -8,7 +8,11 @@ Write code that is easy to delete, not easy to extend. quote}} -{{index organization, "code structure", "Yuan-Ma", "Book of Programming"}} +{{index "Yuan-Ma", "Book of Programming"}} + +{{figure {url: "img/chapter_picture_10.jpg", alt: "Picture of a building built from modular pieces", chapter: framed}}} + +{{index organization, "code structure"}} The ideal program has a crystal clear structure. It's easy to explain how it works, and each part plays a well-defined role. diff --git a/11_async.md b/11_async.md index 6181d4c45..87dfd7d39 100644 --- a/11_async.md +++ b/11_async.md @@ -11,6 +11,8 @@ quote}} {{index "Laozi"}} +{{figure {url: "img/chapter_picture_11.jpg", alt: "Picture of two crows on a branch", chapter: framed}}} + The central part of a computer, the part that carries out the individual steps that make up our programs, is called the _((processor))_. The programs we have seen so far are things that will diff --git a/html/css/ejs.css b/html/css/ejs.css index c9a446a28..68643f5d9 100644 --- a/html/css/ejs.css +++ b/html/css/ejs.css @@ -394,6 +394,11 @@ figure.framed img { border: 4px double #666; } +figure.square-framed img { + border-radius: 30px; + border: 4px double #666; +} + @media screen and (max-width: 500px) { figure { margin: 0; diff --git a/img/chapter_picture_1.jpg b/img/chapter_picture_1.jpg index 4faf0533722f6286dc67bc2ceff8d2799632a25a..ebc0689f03693822c2ccdd4a8a369e06d1670b3e 100644 GIT binary patch literal 62684 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 literal 70056 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

ZFydQ}APkR8VD&b?3_xu0d0yqu?gV<uQcH;^ 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

~6S8J$j`!RhCxu$(tEUH^hI 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 literal 0 HcmV?d00001 diff --git a/img/chapter_picture_2.jpg b/img/chapter_picture_2.jpg index e63fd871e43903436179b205ed743b99bc260cb3..3563ae5c02f799db3de71648532d74d7d1b2abe6 100644 GIT binary patch literal 34739 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"|-tUJhYRu30G+G1r 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%0A}g1u6~nj++UttAbY2nu{89$LX=>6snOYah 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 VnC0rf{AmBRr2l`Pqx@^?e*mPE;vWD2 diff --git a/img/chapter_picture_3.jpg b/img/chapter_picture_3.jpg index d9a1a157371827405e7916df8a4474d09c620a00..53923d98e1f3fe5c4515c5c4a581d0dcf978ca59 100644 GIT binary patch literal 49660 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 literal 59405 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 -5d~m4^CZ6?VaP5{K1Qbt%vNi) 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 Ys~l>?fL{zkf)@t_TWx*Oqej2~*^NP(TL1t6 diff --git a/img/chapter_picture_4.jpg b/img/chapter_picture_4.jpg index e7f30304039d64a181e43d8f387b151c4fa4a738..9deda2e6f8e4b0c78db5a84ab5bfed95b70791b0 100644 GIT binary patch literal 23307 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 literal 31773 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 B8rlE= diff --git a/img/chapter_picture_5.jpg b/img/chapter_picture_5.jpg index d88bae039ed7777c3332acfb1234b331a15658df..76658b8bfb10e6d252a7bfa7d257942e19f13b2b 100644 GIT binary patch literal 26086 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 literal 32555 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 J`Rl*2{~slC>qr0q diff --git a/img/chapter_picture_6.jpg b/img/chapter_picture_6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8af17dbc5777ee992850be7f6fab2115b3cbc054 GIT binary patch literal 27982 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 y%XBuCIzW52QF|5?ykWtXmH8ou9>;_u6e&d zQ+xmDUG+S*dP{e8^{ziFe|7+v3NrFC04OK`0P61n__Gd>1i-?;{Og2;frW#Gg@Z>% zfd4CKNXUrD7-*Q77-$&iSU7~ZSl9&E=ook;cmza5A3l7*#3dysB_<~%{y_XMCs43( zaPV;Os0awC#8??8Vana~xi;{Sv=jNuj{Q5t9K$)TMDJHXX0|h0MBc5)90fe>hNx?5M$6A2lZ}##r3;_A)u23{z`OuRzPh#I(j(l9 zM|=_x3FS5W4^?Y`kQPb08PutXaISk5hyntjpSZB_Bbi- zRt3X5rsqFQTq0u3m~N#5e0O*fZVW9QuX-CVV#uoL_shz>P$wRm0b+c zmBf5>!4z7JcV+=FPg)u^%HWIV+6gh44Bwd|9< zifO~u2k-x;WAv5M!q*gz4-_ET(FsRTBNW-HkkEb2>*Qy@v>fm`BPgBU4iAGpgpk&!OqgzdQ0oQmP-yT?5jH7rqsGJ%JXK z9_Qbaj8IjJB>WzE-DgYx;ii`*e~#BWP7w{spZo_H&zpxPOaOxywq@<#OaK%*=j13c z%~2|XKbZ%~xu@$~VQ3$-Wx?d^6uoSGh@4$S?~FJ=Cc-rdNuK&YGyt+%D%QM@_lDu% zj<>L$Y;oa_O>$@x3-V$CTxyw>xWxa0{;LU{%NaG3lXdToHFp@X(?1V=BZlEfSQwEolwHuHI#-{(*wxP#m&R3 zp{?ukH+elmUU{IT}<>b;zMO zWcy>Ez}2npFKGJSXrSzuGW9PDmc%6`DRTeJvNhqq6597 z=Gv8B5I`7#r}h!0rQM8Y-)!jDQ)jjX(0_vnYD`)^U0Q_w(&Nc0ay+~&+M}4#c}Bd4 zQdWoTQxtkoEZ{;cMVfeos8*IFTOuA)TthgSU%aE*KDnp%7soT+l-qiL^zAepLTyXG zKHxxv9;Qaz0$9(@jwT1Bf<5A-y&|7WP)DQ$6BH#$6pp8*q%kOsMB+(*&#WF6I;=KsZ)e>}2s0=U z$#SQS$If#ZDvVQpvuNL-kP~W7@>pU6%fe1ZNt+9PjWL-RSjD|-Jq9q!ESfG<{!$_+C)=Rc7dDQqYt6A2lAILVu(}PHLsi66BVs

n(tZK!Aizy7} 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 H7cc+W*OACL literal 0 HcmV?d00001 diff --git a/img/chapter_picture_8.jpg b/img/chapter_picture_8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e61d44b40edf3fefe6ad111e8cb87a7316205ef4 GIT binary patch literal 15702 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 literal 0 HcmV?d00001 diff --git a/img/chapter_picture_9.jpg b/img/chapter_picture_9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efb3400153ac0c63f45f8da4329153c96bbc251d GIT binary patch literal 26842 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

M0Py2NaKEjYVMMcG_}Sz3>Z^FIoy?5E@*iVNu&} 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 Date: Tue, 3 Apr 2018 15:41:41 +0200 Subject: [PATCH 054/476] :books: Fix typo on 07_robot.md --- 07_robot.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/07_robot.md b/07_robot.md index 92270eb3f..ed6b919ea 100644 --- a/07_robot.md +++ b/07_robot.md @@ -270,7 +270,7 @@ function runRobot(state, robot, memory) { Consider what a robot has to do to "solve" a given state. It must pick up all parcels by visiting every location that has a parcel, and -deliver them, by visiting every location that a parcel is address to, +deliver them, by visiting every location that a parcel is addressed to, but only after picking up the parcel. What is the dumbest strategy that could possibly work? The robot could From 55f1660ea8328c5e94644795a3493bd39d715b6d Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 4 Apr 2018 13:28:57 +0200 Subject: [PATCH 055/476] Fix sentence in Chapter 16 Closes #417 --- 16_game.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/16_game.md b/16_game.md index 63d8e7b6e..2d32e45c5 100644 --- a/16_game.md +++ b/16_game.md @@ -197,8 +197,8 @@ field types like `"empty"`, `"wall"`, or `"lava"`. {{index "map method"}} To create these arrays we map over the rows, and then over their -content. Remember that map passes the array index as a second argument -to the mapping function, which are used here to know the x- and +content. Remember that `map` passes the array index as a second +argument to the mapping function, which tells us the the x- and y-coordinates of a given character. Positions in the game will be stored as pairs of coordinates, with the top left being 0,0, and each background square being 1 unit high and wide. From cf979a6b3e490e360ac1a7576382e907199d01ff Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 6 Apr 2018 12:23:15 +0200 Subject: [PATCH 056/476] Fix missing word in Chapter 16 Closes #419 --- 16_game.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/16_game.md b/16_game.md index 2d32e45c5..bae5bd5c4 100644 --- a/16_game.md +++ b/16_game.md @@ -803,7 +803,7 @@ interactions between the elements. When the player hits a wall or floor, they should not simply move through it. The game must notice when a given motion causes an object to hit another object and respond accordingly. For walls, the motion must be stopped. When hitting a -coin, it be collected. When touching lava, the game should be lost. +coin, it must be collected. When touching lava, the game should be lost. Solving this for the general case is a big task. You can find libraries, usually called _((physics engine))s_, that simulate From b2818a9f9b044c6e5c527bbf61894eeb6458e303 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 16 Apr 2018 09:23:33 +0200 Subject: [PATCH 057/476] Integrate editing for Chapter 8 --- 08_error.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/08_error.md b/08_error.md index 0d22b5377..cc74d19bf 100644 --- a/08_error.md +++ b/08_error.md @@ -87,7 +87,7 @@ with `counter` in the example, JavaScript quietly creates a global binding and uses that. In strict mode an ((error)) is reported instead. This is very helpful. It should be noted, though, that this doesn't work when the binding in question already exists as a global -binding. In that case the loop will still quietly overwrite the value +binding. In that case, the loop will still quietly overwrite the value of the binding. {{index this, "global object", undefined, "strict mode"}} @@ -365,7 +365,7 @@ have the network fail. If you're only programming for yourself, you can afford to just ignore such problems until they occur. But if you build something that is going to be used by anybody else, you usually want the program to do -better than just crashing. Sometimes the right thing to do is take the +better than just crash. Sometimes the right thing to do is take the bad input in stride and continue running. In other cases, it is better to report to the user what went wrong and then give up. But in either situation, the program has to actively do something in response to the @@ -507,7 +507,7 @@ the failing call. Note that the `look` function completely ignores the possibility that `promptDirection` might go wrong. This is the big advantage of -exceptions—error-handling code is necessary only at the point where +exceptions: Error-handling code is necessary only at the point where the error occurs and at the point where it is handled. The functions in between can forget all about it. @@ -567,7 +567,7 @@ But often problems like this occur in more subtle ways. Even functions that don't look like they will throw an exception might do so in exceptional circumstances or when they contain a programmer mistake. -One way to address this is to use less side effects. Again, a +One way to address this is to use fewer side effects. Again, a programming style that computes new values instead of changing existing data helps. If a piece of code stops running in the middle of creating a new value, no one ever sees the half-finished value, and @@ -579,7 +579,7 @@ But that isn't always practical. So there is another feature that `try` statements have. They may be followed by a `finally` block either instead of or in addition to a `catch` block. A `finally` block says "no matter _what_ happens, run this code after trying to run the -code in the `try` block". +code in the `try` block." ```{includeCode: true} function transfer(from, amount) { @@ -666,7 +666,7 @@ the `catch` block. But it might not be. Some other ((assumption)) might be violated, or you might have introduced a bug that is causing an exception. Here is -an example, which _attempts_ to keep on calling `promptDirection` +an example that _attempts_ to keep on calling `promptDirection` until it gets a valid answer: ```{test: no} @@ -689,7 +689,7 @@ valid direction is given. _But_ we misspelled `promptDirection`, which will result in an "undefined variable" error. Because the `catch` block completely ignores its exception value (`e`), assuming it knows what the problem is, it wrongly treats the binding error as indicating -bad input. Not only does this cause an infinite loop, but it also +bad input. Not only does this cause an infinite loop, it also "buries" the useful error message about the misspelled binding. As a general rule, don't blanket-catch exceptions unless it is for the @@ -731,7 +731,7 @@ function promptDirection(question) { The new error class extends `Error`. It doesn't define its own constructor, which means that it inherits the `Error` constructor, which expects a string message as argument. In fact, it doesn't define -anything at all—the class is empty. `InputError` object behave like +anything at all—the class is empty. `InputError` objects behave like `Error` objects, except that they have a different class by which we can recognize them. @@ -770,7 +770,7 @@ the way it is supposed to be. They are used not to handle situations that can come up in normal operation, but to find programmer mistakes. If, for example, `firstElement` is described as a function that should -never be called on empty arrays, we might write it like this. +never be called on empty arrays, we might write it like this: ``` function firstElement(array) { @@ -812,7 +812,7 @@ exception value will be given to the `catch` block that catches it, which should verify that it is actually the expected kind of exception and then do something with it. To help address the unpredictable control flow caused by exceptions, `finally` blocks can be used to -ensure a piece of code _always_ runs when a block finishes. +ensure that a piece of code _always_ runs when a block finishes. ## Exercises @@ -949,6 +949,6 @@ body. The `finally` block after it should lock the box again. To make sure we don't lock the box when it wasn't already locked, check its lock at the start of the function and unlock and lock -it only when it started out locked. +it only when it started out locked. hint}} From 60eb63931ea66ee5c0b1bdc8b92b50c2fa695276 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 16 Apr 2018 09:31:44 +0200 Subject: [PATCH 058/476] Integrate editing for Chapter 7 --- 07_robot.md | 68 ++++++++++++++++++++++++++--------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/07_robot.md b/07_robot.md index ed6b919ea..04178a598 100644 --- a/07_robot.md +++ b/07_robot.md @@ -28,8 +28,8 @@ will be a mail-delivery ((robot)) picking up and dropping off parcels. {{index "roads array"}} -The village of ((Meadowfield)) isn't very big. It consists of eleven -places with fourteen roads between them. It can be described with this +The village of ((Meadowfield)) isn't very big. It consists of 11 +places with 14 roads between them. It can be described with this array of roads: ```{includeCode: true} @@ -88,10 +88,10 @@ as separate strings. ## The task -Our ((robot)) will be moving around the village. There will be parcels +Our ((robot)) will be moving around the village. There are parcels in various places, each addressed to some other place. The robot picks -up parcels when it comes to them, and delivers them when it arrives at -their destination. +up parcels when it comes to them and delivers them when it arrives at +their destinations. The automaton must decide, at each point, where to go next. It has finished its task when all parcels have been delivered. @@ -157,7 +157,7 @@ if not, it returns the old state, since this is not a valid move. {{index "map method", "filter method"}} -Then, it creates a new state with the destination as the robot's new +Then it creates a new state with the destination as the robot's new place. But it also needs to create a new set of parcels—parcels that the robot is carrying (that are at the robot's current place) need to be moved along to the new place. And parcels that are addressed to the @@ -193,13 +193,13 @@ where the robot is at the post office and the parcel is undelivered. {{index "persistent data structure", mutability, "data structure"}} Data structures that don't change are called _((immutable))_ or -_persistent_. They behave a lot like strings and numbers, in that they +_persistent_. They behave a lot like strings and numbers in that they are who they are, and stay that way, rather than containing different things at different times. In JavaScript, just about everything _can_ be changed, so working with values that are supposed to be persistent requires some restraint. -There is a function called `Object.freeze`, which changes an object so +There is a function called `Object.freeze` that changes an object so that writing to its properties is ignored. You could use that to make sure your objects aren't changed, if you want to be careful. Freezing does require the computer to do some extra work, and having updates @@ -214,7 +214,7 @@ console.log(object.value); // → 5 ``` -Why am I going out of my way to not change objects, when the language +Why am I going out of my way to not change objects when the language is obviously expecting me to? Because it helps me understand my programs. This is about complexity @@ -230,17 +230,17 @@ limit on what kind of systems we can build is how much we can understand. Anything that makes your code easier to understand makes it possible to build a more ambitious system. -Unfortunately, while understanding a system built on persistent data +Unfortunately, although understanding a system built on persistent data structures is easier, _designing_ one, especially when your -programming language isn't helping, can be a little harder. Though -we'll look for opportunities to use persistent data structures in this -book, we will also be using changeable ones. +programming language isn't helping, can be a little harder. We'll +look for opportunities to use persistent data structures in this +book, but we'll also be using changeable ones. ## Simulation {{index simulation, "virtual world"}} -A delivery ((robot)) looks at the world, and decides in which +A delivery ((robot)) looks at the world and decides in which direction it wants to move. As such, we could say that a robot is a function that takes a `VillageState` object and returns the name of a nearby place. @@ -248,7 +248,7 @@ nearby place. {{index "runRobot function"}} Because we want robots to be able to remember things, so that they can -make and execute plans, we also pass them their memory, and allow them +make and execute plans, we also pass them their memory and allow them to return a new memory. Thus, the thing a robot returns is an object containing both the direction it wants to move in and a memory value that will be given back to it the next time it is called. @@ -270,12 +270,12 @@ function runRobot(state, robot, memory) { Consider what a robot has to do to "solve" a given state. It must pick up all parcels by visiting every location that has a parcel, and -deliver them, by visiting every location that a parcel is addressed to, +deliver them by visiting every location that a parcel is addressed to, but only after picking up the parcel. What is the dumbest strategy that could possibly work? The robot could -just walk in a random direction every turn. That means that, with -great likelihood, it will eventually run into all parcels, and then +just walk in a random direction every turn. That means, with +great likelihood, that it will eventually run into all parcels, and then also at some point reach the place where they should be delivered. {{index "randomPick function", "randomRobot function"}} @@ -302,7 +302,7 @@ the array. Since this robot does not need to remember anything, it ignores its second argument (remember that JavaScript functions can be called with -extra arguments without ill effects), and omits the `memory` property +extra arguments without ill effects) and omits the `memory` property in its returned object. To put this sophisticated robot to work, we'll first need a way to @@ -348,7 +348,7 @@ isn't planning ahead very well. We'll address that soon. For a more pleasant perspective on the simulation, you can use the `runRobotAnimation` function that's available in this chapter's -programming environment. This will run the simulation, but instead of +programming environment. This runs the simulation, but instead of outputting text, it shows you the robot moving around the village map. ```{test: no} @@ -385,7 +385,7 @@ const mailRoute = [ {{index "routeRobot function"}} To implement the route-following robot, we'll need to make use of -robot memory. The robot keeps the rest of its route in its memory, and +robot memory. The robot keeps the rest of its route in its memory and drops the first element every turn. ```{includeCode: true} @@ -423,11 +423,11 @@ require some kind of route-finding function. The problem of finding a route through a ((graph)) is a typical _((search problem))_. We can tell whether a given solution (a route) -is a valid solution, but we can't directly compute the solution, the +is a valid solution, but we can't directly compute the solution the way we could for 2 + 2. Instead, we have to keep creating potential solutions until we find one that works. -There is an infinite amount of possible routes through a graph. But +The number of possible routes through a graph is infinite. But when searching for a route from _A_ to _B_, we are only interested in the ones that start at _A_. We also don't care about routes that visit the same place twice—those are definitely not the most efficient route @@ -446,7 +446,7 @@ shortest routes, if there are more than one) to the goal. {{id findRoute}} -This is a function that does this: +Here is a function that does this: ```{includeCode: true} function findRoute(graph, from, to) { @@ -474,7 +474,7 @@ Therefore, the function keeps a _((work list))_. This is an array of places that should be explored next, along with the route that got us there. It starts with just the start position and an empty route. -The search then operates by taking the next item in the list, and +The search then operates by taking the next item in the list and exploring that, which means that all roads going from that place are looked at. If one of them is the goal, a finished route can be returned. Otherwise, if we haven't looked at this place before, a new @@ -516,9 +516,9 @@ function goalOrientedRobot({place, parcels}, route) { This robot uses its memory value as a list of directions to move in, just like the route-following robot. Whenever that list is empty, it has to figure out what to do next. It takes the first undelivered -parcel in the set and, if that hasn't been picked up yet, plots a -route towards it. If it _has_ been picked up, it still needs to be -delivered, so it creates a route towards the delivery address instead. +parcel in the set and, if that parcel hasn't been picked up yet, plots a +route towards it. If the parcel _has_ been picked up, it still needs to be +delivered, so the robot creates a route towards the delivery address instead. {{if interactive @@ -545,8 +545,8 @@ It's hard to objectively compare ((robot))s by just letting them solve a few scenarios. Maybe one robot just happened to get easier tasks, or the kind of tasks that it is good at, whereas the other didn't. -Write a function `compareRobots` which takes two robots (and their -starting memory). It should generate a hundred tasks, and let each of +Write a function `compareRobots` that takes two robots (and their +starting memory). It should generate 100 tasks and let each of the robots solve each of these tasks. When done, it should output the average number of steps each robot took per task. @@ -611,8 +611,8 @@ village because the parcel it happens to be looking at happens to be at the other side of the map, even if there are others much closer. One possible solution would be to compute routes for all packages, and -then take the shortest one. Even better results can be obtained by, if -there are multiple shortest routes, preferring the ones that go to +then take the shortest one. Even better results can be obtained, if +there are multiple shortest routes, by preferring the ones that go to pick up a package instead of delivering a package. hint}} @@ -673,13 +673,13 @@ if}} {{index "persistent map (exercise)", "Set class", array, "PGroup class"}} -The most convenient way to represent the set of member values remains +The most convenient way to represent the set of member values is still an array, since those are easy to copy. {{index "concat method", "filter method"}} When a value is added to the group, you can create a new group with a -copy of the original array that has the value added (for example using +copy of the original array that has the value added (for example, using `concat`). When a value is deleted, you filter it from the array. The class' ((constructor)) can take such an array as argument, and From 755a023038129280adc3ce0664430df0ac14ecb3 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 16 Apr 2018 09:34:57 +0200 Subject: [PATCH 059/476] Clarify a paragraph in exercise 4.4 Issue #418 --- 04_data.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/04_data.md b/04_data.md index 45239ee49..568044456 100644 --- a/04_data.md +++ b/04_data.md @@ -1580,8 +1580,8 @@ with a recursive call to `deepEqual`. {{index null, "=== operator", "typeof operator"}} -To find out whether to compare two things by identity (use the `===` -operator for that) or by looking at their properties, you can use the +To find out whether values should be compared directly (use the `===` +operator for that) or have their properties compared, you can use the `typeof` operator. If it produces `"object"` for both values, you should do a deep comparison. But you have to take one silly exception into account: because of a historical accident, `typeof null` also From 66b891efcad9faedf3bd48b5a866d76019d7167d Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 16 Apr 2018 09:38:16 +0200 Subject: [PATCH 060/476] Use the term identity when introducing mutability Issue #420 --- 04_data.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/04_data.md b/04_data.md index 568044456..b4277dafb 100644 --- a/04_data.md +++ b/04_data.md @@ -441,10 +441,11 @@ console.log(object3.value); {{index "tentacle (analogy)", [binding, "model of"]}} -The `object1` and `object2` bindings grasp the _same_ object, which -is why changing `object1` also changes the value of `object2`. The -binding `object3` points to a different object, which initially -contains the same properties as `object1` but lives a separate life. +The `object1` and `object2` bindings grasp the _same_ object, which is +why changing `object1` also changes the value of `object2`. They are +said to have the same _identity_. The binding `object3` points to a +different object, which initially contains the same properties as +`object1` but lives a separate life. {{index "const keyword", "let keyword"}} @@ -457,12 +458,12 @@ the same object, the _contents_ of that object might change. {{index "== operator", [comparison, "of objects"], "deep comparison"}} -When you compare objects with JavaScript's `==` operator, it will -produce `true` only if both objects are precisely the same value. -Comparing different objects will return `false`, even if they have -identical properties. There is no "deep" comparison operation built -into JavaScript, which compares objects by contents, but it is -possible to write it yourself (which is one of the +When you compare objects with JavaScript's `==` operator, it compares +by identity: It will produce `true` only if both objects are precisely +the same value. Comparing different objects will return `false`, even +if they have identical properties. There is no "deep" comparison +operation built into JavaScript, which compares objects by contents, +but it is possible to write it yourself (which is one of the [exercises](data#exercise_deep_compare) at the end of this chapter). ## The lycanthrope's log From fc2e5ee3d3bdbc4fb1fd0153d41b85ed39f2e8fd Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 16 Apr 2018 09:47:10 +0200 Subject: [PATCH 061/476] Add note about double use of the word 'map' to Chapter 6 --- 06_object.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/06_object.md b/06_object.md index afbd9d5a7..f8ef72b07 100644 --- a/06_object.md +++ b/06_object.md @@ -456,11 +456,18 @@ console.log(Object.prototype.toString.call([1, 2])); ## Maps +{{index "map method"}} + +We saw the word _map_ used in the [previous chapter](higher_order#map) +for an operation that transforms a data structure by applying a +function its elements. Confusing as it is, in programming the same +word is also used for a related but rather different thing. + {{index "map (data structure)", "ages example", "data structure"}} -A _map_ is a data structure that associates values with other values. -For example, you might want to map names to ages. It is possible to -use objects for this. +A _map_ (noun) is a data structure that associates values with other +values. For example, you might want to map names to ages. It is +possible to use objects for this. ``` let ages = { From e4b1d80fadb1f38f7283ed5a9bd5f6e0d563630c Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 16 Apr 2018 09:50:47 +0200 Subject: [PATCH 062/476] Clarify exercise 7.3 --- 06_object.md | 6 +++--- 07_robot.md | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/06_object.md b/06_object.md index f8ef72b07..23d578240 100644 --- a/06_object.md +++ b/06_object.md @@ -465,9 +465,9 @@ word is also used for a related but rather different thing. {{index "map (data structure)", "ages example", "data structure"}} -A _map_ (noun) is a data structure that associates values with other -values. For example, you might want to map names to ages. It is -possible to use objects for this. +A _map_ (noun) is a data structure that associates values (the keys) +with other values. For example, you might want to map names to ages. +It is possible to use objects for this. ``` let ages = { diff --git a/07_robot.md b/07_robot.md index 04178a598..35d53bd9f 100644 --- a/07_robot.md +++ b/07_robot.md @@ -635,8 +635,9 @@ Its `add` method, however, should return a _new_ `PGroup` instance with the given member added, and leave the old one unchanged. Similarly, `delete` creates a new instance without a given member. -The class should work for keys of any type, not just strings. It does -_not_ have to be efficient when used with large amounts of keys. +The class should work for values of any type, not just strings. It +does _not_ have to be efficient when used with large amounts of +values. The ((constructor)) shouldn't be part of the class' ((interface)) (though you'll definitely want to use it internally). Instead, there From fbe0573966685d16d6daf52f198d2b5c59d42620 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 16 Apr 2018 09:52:47 +0200 Subject: [PATCH 063/476] Fix misnamed property in Chapter 17 Closes #422 --- 17_canvas.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/17_canvas.md b/17_canvas.md index f1ed8c4d3..3fc06ddfb 100644 --- a/17_canvas.md +++ b/17_canvas.md @@ -491,12 +491,12 @@ helpful. We need a way to draw text to the ((canvas)). ## Text -{{index stroking, filling, "fillColor property", "fillText method", "strokeText method"}} +{{index stroking, filling, "fillStyle property", "fillText method", "strokeText method"}} A 2D canvas drawing context provides the methods `fillText` and `strokeText`. The latter can be useful for outlining letters, but usually `fillText` is what you need. It will fill the outline of the -given ((text)) with the current `fillColor`. +given ((text)) with the current `fillStyle`. ```{lang: "text/html"} From 6b904ae29f040a5dc6e5a238919890cec81aac82 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 16 Apr 2018 09:53:50 +0200 Subject: [PATCH 064/476] Add 'about' to not-entirely-accurate unit conversion Closes #423 --- 17_canvas.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/17_canvas.md b/17_canvas.md index 3fc06ddfb..38a801565 100644 --- a/17_canvas.md +++ b/17_canvas.md @@ -703,8 +703,8 @@ previous transformations. So if we translate by 10 horizontal pixels twice, everything will be drawn 20 pixels to the right. If we first move the center of the -coordinate system to (50,50) and then rotate by 20 ((degree))s (0.1π -in ((radian))s), that rotation will happen _around_ point (50,50). +coordinate system to (50,50) and then rotate by 20 ((degree))s (about +0.1π ((radian))s), that rotation will happen _around_ point (50,50). {{figure {url: "img/transform.svg", alt: "Stacking transformations",width: "9cm"}}} From 24fec6cb5fbc4fc7e86b5f636e3cef05bfdddd8b Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 16 Apr 2018 09:55:10 +0200 Subject: [PATCH 065/476] Clarify 'viewport' term in Chapter 16 Closes #424 --- 16_game.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/16_game.md b/16_game.md index bae5bd5c4..386e1b5b5 100644 --- a/16_game.md +++ b/16_game.md @@ -684,14 +684,15 @@ white halo effect. {{index "position (CSS)", "max-width (CSS)", "overflow (CSS)", "max-height (CSS)", viewport, scrolling}} -We can't assume that the level always fits in the viewport. That is -why the `scrollPlayerIntoView` call is needed—it ensures that if the -level is protruding outside the viewport, we scroll that viewport to -make sure the player is near its center. The following ((CSS)) gives -the game's wrapping ((DOM)) element a maximum size and ensures that -anything that sticks out of the element's box is not visible. We also -give the outer element a relative position so that the actors inside -it are positioned relative to the level's top-left corner. +We can't assume that the level always fits in the _viewport_—the +element into which we draw the game. That is why the +`scrollPlayerIntoView` call is needed—it ensures that if the level is +protruding outside the viewport, we scroll that viewport to make sure +the player is near its center. The following ((CSS)) gives the game's +wrapping ((DOM)) element a maximum size and ensures that anything that +sticks out of the element's box is not visible. We also give the outer +element a relative position so that the actors inside it are +positioned relative to the level's top-left corner. ```{lang: "text/css"} .game { From 00f586b0ac77c644431ca0592a2f84e19f9da51e Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 16 Apr 2018 10:00:48 +0200 Subject: [PATCH 066/476] Be more specific about result in exercise 18.1 Closes #425 --- 18_http.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/18_http.md b/18_http.md index 6a3d6ac67..fbc487e6a 100644 --- a/18_http.md +++ b/18_http.md @@ -1257,7 +1257,7 @@ Send requests to fetch all three formats of this resource. Use the header named `Accept` to the desired media type. Finally, try asking for the media type `application/rainbows+unicorns` -and see what happens. +and see which status code that produces. {{if interactive From be3c44e327141b635050c057e41c884b1350084d Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 16 Apr 2018 15:40:14 +0200 Subject: [PATCH 067/476] Fix typo in Chapter 18 --- 18_http.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/18_http.md b/18_http.md index fbc487e6a..1b71da75a 100644 --- a/18_http.md +++ b/18_http.md @@ -284,7 +284,7 @@ request is addressed to can't be found. {{index [path, URL], "relative URL"}} The first argument to `fetch` is the URL that should be requested. -What that ((URL)) doesn't start with a protocol name (such as _http:_) +When that ((URL)) doesn't start with a protocol name (such as _http:_) it is treated as relative, which means that it is interpreted relative to the current document. When it starts with a slash (/), it replaces the current path, which is the part after the server name. When it From 1a9fdf94e8b5c8d6b762ed4d8ac7fed01eeaf9cb Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 17 Apr 2018 11:20:17 +0200 Subject: [PATCH 068/476] Add a missing anchor --- 05_higher_order.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/05_higher_order.md b/05_higher_order.md index c8764cc13..3c4b6680b 100644 --- a/05_higher_order.md +++ b/05_higher_order.md @@ -373,6 +373,8 @@ console.log(SCRIPTS.filter(s => s.direction == "ttb")); // → [{name: "Mongolian", …}, …] ``` +{{id map}} + ## Transforming with map {{index [array, methods], "map method"}} From 50b6cb2e622862999798a8b3b18c506e1ba1951c Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 17 Apr 2018 11:21:28 +0200 Subject: [PATCH 069/476] Integrate tech editing for Chapter 4 --- 04_data.md | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/04_data.md b/04_data.md index b4277dafb..73e17d0dc 100644 --- a/04_data.md +++ b/04_data.md @@ -153,7 +153,7 @@ null.length; {{indexsee "dot character", "period character"}} {{index "[] (subscript)", "period character", "square brackets", "computed property"}} -The two typical ways to access properties in JavaScript are with a dot +The two main ways to access properties in JavaScript are with a dot and with square brackets. Both `value.x` and `value[x]` access a ((property)) on `value`—but not necessarily the same property. The difference is in how `x` is interpreted. When using a dot, the word @@ -161,12 +161,12 @@ after the dot is the literal name of the property. When using square brackets, the expression between the brackets is _evaluated_ to get the property name. Whereas `value.x` fetches the property of `value` named "x", `value[x]` tries to evaluate the expression `x` and uses -the result as the property name. +the result, converted to a string, as the property name. So if you know that the property you are interested in is called -_name_, you say `value.name`. If you want to extract the property +_color_, you say `value.color`. If you want to extract the property named by the value held in the binding `i`, you say `value[i]`. -Property names can be any string, but the dot notation only works with +Property names are strings. They can be any string, but the dot notation only works with names that look like valid binding names. So if you want to access a property named _2_ or _John Doe_, you must use square brackets: `value[2]` or `value["John Doe"]`. @@ -322,7 +322,7 @@ name tattooed on it. {{index "delete operator", [property, deletion]}} The `delete` operator cuts off a tentacle from such an octopus. It is -a unary operator that, when applied to a property access expression, +a unary operator that, when applied to an object property, will remove the named property from the object. This is not a common thing to do, but it is possible. @@ -342,7 +342,7 @@ console.log("right" in anObject); {{index "in operator", [property, "testing for"], object}} The binary `in` operator, when applied to a string and an object, -tells you whether that object has that property. The difference +tells you whether that object has a property with that name. The difference between setting a property to `undefined` and actually deleting it is that, in the first case, the object still _has_ the property (it just doesn't have a very interesting value), whereas in the second case the @@ -374,7 +374,7 @@ console.log(objectA); Arrays, then, are just a kind of object specialized for storing sequences of things. If you evaluate `typeof []`, it produces `"object"`. You can see them as long, flat octopuses with all their -arms in a neat row, labeled with numbers. +tentacles in a neat row, labeled with numbers. {{index journal, "weresquirrel example"}} @@ -411,8 +411,8 @@ same. The text inside it cannot be changed. If you have a string that contains `"cat"`, it is not possible for other code to change a character in your string to make it spell `"rat"`. -The content of an object value _can_ be modified, by changing its -properties. +Objects work differently. You _can_ change their properties, +causing a single object value to have different content at different times. {{index [object, identity], identity, memory, mutability}} @@ -452,9 +452,17 @@ different object, which initially contains the same properties as Bindings can also be changeable or constant, but this is separate from the way their values behave. Even though number values don't change, you can use a `let` ((binding)) to keep track of a changing number by -changing the value it points at. Similarly, though a `const` binding -to an object can itself not be changed and will continue to point at -the same object, the _contents_ of that object might change. +changing the value the binding points at. Similarly, though a `const` +binding to an object can itself not be changed and will continue to +point at the same object, the _contents_ of that object might change. + +```{test: no} +const score = {visitors: 0, home: 0}; +// This is okay +score.visitors = 1; +// This isn't allowed +score = {visitors: 1, home: 1}; +``` {{index "== operator", [comparison, "of objects"], "deep comparison"}} @@ -861,7 +869,7 @@ adds it to the front instead of the back of the queue. {{index [array, searching], "indexOf method", "lastIndexOf method"}} To search for a specific value, arrays provide an `indexOf` method. It -goes through the array from the start to the end and returns the +searches through the array from the start to the end and returns the index at which the requested value was found—or -1 if it wasn't found. To search from the end instead of the start, there's a similar method called `lastIndexOf`. @@ -898,8 +906,9 @@ entire array. {{index concatenation, "concat method"}} The `concat` method can be used to glue arrays together to create a -new array, similar to what the `+` operator does for strings. The -following example shows both `concat` and `slice` in action. It takes +new array, similar to what the `+` operator does for strings. + +The following example shows both `concat` and `slice` in action. It takes an array and an index, and it returns a new array that is a copy of the original array with the element at the given index removed: @@ -983,6 +992,8 @@ You can split a string on every occurrence of another string with ``` let sentence = "Secretarybirds specialize in stomping"; let words = sentence.split(" "); +console.log(words); +// → ["Secretarybirds", "specialize", "in", "stomping"] console.log(words.join(". ")); // → Secretarybirds. specialize. in. stomping ``` @@ -1043,7 +1054,7 @@ console.log(max(4, 1, 9, -2)); When such a function is called, the _((rest parameter))_ is bound to an array containing all further arguments. If there are other parameters before it, their values aren't part of that array. When, as -in `max`, it is the first parameter, it will hold all arguments. +in `max`, it is the only parameter, it will hold all arguments. {{index "function application"}} @@ -1362,6 +1373,7 @@ console.log(range(5, 2, -1)); console.log(sum(range(1, 10))); // → 55 ``` + if}} {{hint @@ -1380,7 +1392,7 @@ operator rather than `<` to check for the end of your loop. {{index "arguments object"}} -To step parameter can be an optional parameter that defaults (using +The step parameter can be an optional parameter that defaults (using the `=` operator) to 1. {{index "range function", "for loop"}} @@ -1429,6 +1441,7 @@ reverseArrayInPlace(arrayValue); console.log(arrayValue); // → [5, 4, 3, 2, 1] ``` + if}} {{hint @@ -1526,6 +1539,7 @@ console.log(prepend(10, prepend(20, null))); console.log(nth(arrayToList([10, 20, 30]), 1)); // → 20 ``` + if}} {{hint @@ -1606,6 +1620,7 @@ console.log(deepEqual(obj, {here: 1, object: 2})); console.log(deepEqual(obj, {here: {is: "an"}, object: 2})); // → true ``` + if}} {{hint From 7297d29c9349e8ee5899a4e0a1d715bce88c6dc9 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 17 Apr 2018 11:25:13 +0200 Subject: [PATCH 070/476] Avoid failing test from use of unsupported Regexp feature --- 09_regexp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/09_regexp.md b/09_regexp.md index 5973713c7..872054c2d 100644 --- a/09_regexp.md +++ b/09_regexp.md @@ -1165,7 +1165,7 @@ not widely supported yet, it is possible to use `\p` in a regular expression (that must have the Unicode option enabled) to match all characters to which the Unicode standard assigns a given property. -```{test: false} +```{test: never} console.log(/\p{Script=Greek}/u.test("α")); // → true console.log(/\p{Script=Arabic}/u.test("α")); From dac326cf7d9806808cbc0d47833e099f0bed626c Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 17 Apr 2018 12:57:05 +0200 Subject: [PATCH 071/476] Small tweaks in introduction --- 00_intro.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/00_intro.md b/00_intro.md index ff2d56845..bafa6ecbb 100644 --- a/00_intro.md +++ b/00_intro.md @@ -13,12 +13,12 @@ quote}} This is a book about instructing ((computer))s. Computers are about as common as screwdrivers today, but they are quite a bit more complex, -and making them do the things you want them to do isn't always easy. +and making them do what you want them to do isn't always easy. If the task you have for your computer is a common, well-understood one, such as showing you your email or acting like a calculator, you can open the appropriate ((application)) and get to work. But for -unique or open-ended tasks, there may not be an application. +unique or open-ended tasks, there probably is no application. That is where ((programming)) may come in. _Programming_ is the act of constructing a _program_—a set of precise instructions that tell a From 1f8f0ea187c320b9489cf1fe330e1df32c5a1dad Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 18 Apr 2018 09:38:33 +0200 Subject: [PATCH 072/476] Fix typo in Chapter 15 --- 15_event.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/15_event.md b/15_event.md index 6049b8917..a8f9a20d5 100644 --- a/15_event.md +++ b/15_event.md @@ -40,8 +40,8 @@ approach is called _((polling))_. Most programmers prefer to avoid it. {{index "callback function", "event handling"}} A better mechanism is for the system to actively notify our code when -an events occurs. Browsers do this by allowing us to register -functions as _handlers_ for specific events. +an event occurs. Browsers do this by allowing us to register functions +as _handlers_ for specific events. ```{lang: "text/html"}

Click this document to activate the handler.

From ba5cfbf7f20cb69a8c1d62ab7816e006e505740d Mon Sep 17 00:00:00 2001 From: Edouard Alvard Date: Wed, 18 Apr 2018 13:06:16 +0200 Subject: [PATCH 073/476] :books: Fix typo in 18_http.md --- 18_http.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/18_http.md b/18_http.md index 1b71da75a..8eb3c83ff 100644 --- a/18_http.md +++ b/18_http.md @@ -483,8 +483,8 @@ but we'll start with a rough overview. {{index "input (HTML tag)", "type attribute"}} -A lot of field types use the -`` tag. This tag's `type` attribute is used to select the +A lot of field types use the +`` tag. This tag's `type` attribute is used to select the field's style. These are some commonly used `` types: {{index "password field", checkbox, "radio button", "file field"}} @@ -1170,7 +1170,7 @@ function to move to a new state. The use of `Object.assign` in the example is intended to create a new object that is a clone of the old `state.notes`, but with one property added or overwritten. `Object.assign` takes its first argument, and -add all properties from any further arguments to it. Thus, giving it +adds all properties from any further arguments to it. Thus, giving it an empty object will cause it to fill a fresh object. The ((square brackets)) notation in the third argument is used to create a property whose names is based on some dynamic value. From 4932412dfbd45a2d8a60a7badb186a549baa6b61 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 19 Apr 2018 10:29:19 +0200 Subject: [PATCH 074/476] Fixes to exercise 9.1 --- 09_regexp.md | 2 +- code/solutions/09_1_regexp_golf.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/09_regexp.md b/09_regexp.md index 872054c2d..56bc340e7 100644 --- a/09_regexp.md +++ b/09_regexp.md @@ -1287,7 +1287,7 @@ verify(/.../, verify(/.../, ["pop culture", "mad props"], - ["plop"]); + ["plop", "prrrop"]); verify(/.../, ["ferret", "ferry", "ferrari"], diff --git a/code/solutions/09_1_regexp_golf.js b/code/solutions/09_1_regexp_golf.js index f4e5ee1fc..72a6af16a 100644 --- a/code/solutions/09_1_regexp_golf.js +++ b/code/solutions/09_1_regexp_golf.js @@ -6,7 +6,7 @@ verify(/ca[rt]/, verify(/pr?op/, ["pop culture", "mad props"], - ["plop"]); + ["plop", "prrrop"]); verify(/ferr(et|y|ari)/, ["ferret", "ferry", "ferrari"], @@ -20,7 +20,7 @@ verify(/\s[.,:;]/, ["bad punctuation ."], ["escape the dot"]); -verify(/\w{7,}/, +verify(/\w{7}/, ["hottentottententen"], ["no", "hotten totten tenten"]); From 6b0cf8215cfa75dc00090b75c317ab1564ae7ab6 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 20 Apr 2018 09:35:03 +0200 Subject: [PATCH 075/476] Integrate editing for Chapter 9 --- 09_regexp.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/09_regexp.md b/09_regexp.md index 56bc340e7..7e2d013bc 100644 --- a/09_regexp.md +++ b/09_regexp.md @@ -59,7 +59,7 @@ let re1 = new RegExp("abc"); let re2 = /abc/; ``` -Both of these regular expression objects represent the same +Both of those regular expression objects represent the same ((pattern)): an _a_ character followed by a _b_ followed by a _c_. {{index "backslash character", "RegExp class"}} @@ -138,7 +138,7 @@ sit right next to each other in this ordering (codes 48 to 57), so {{index whitespace, "alphanumeric character", "period character"}} -There are a number of common character groups that have their own +A number of common character groups have their own built-in shortcuts. Digits are one of them: `\d` means the same thing as `[0-9]`. @@ -227,7 +227,7 @@ any suitable text to match. {{index "British English", "American English", "question mark"}} A question mark makes a part of a pattern _((optional))_, meaning it -may occur zero or one time. In the following example, the _u_ +may occur zero times or one time. In the following example, the _u_ character is allowed to occur, but the pattern also matches when it is missing. @@ -260,7 +260,7 @@ console.log(dateTime.test("30-1-2003 8:45")); ``` You can also specify open-ended ((range))s when using ((curly braces)) -by omitting the number after the comma. So `{5,}` means five or more +by omitting the number after the comma. So, `{5,}` means five or more times. ## Grouping subexpressions @@ -460,7 +460,7 @@ second character and end at the second-to-last character. If we want to enforce that the match must span the whole string, we can add the markers `^` and `$`. The caret matches the start of the -input string, while the dollar sign matches the end. So, `/^\d+$/` +input string, whereas the dollar sign matches the end. So, `/^\d+$/` matches a string consisting entirely of one or more digits, `/^!/` matches any string that starts with an exclamation mark, and `/x^/` does not match any string (there cannot be an _x_ before the start of @@ -632,7 +632,7 @@ write something like `/([01]+)+b/`. {{index "inner loop", [nesting, "in regexps"]}} If that tries to match some long series of zeros and ones with no -trailing _b_ character, the matcher will first go through the inner +trailing _b_ character, the matcher first goes through the inner loop until it runs out of digits. Then it notices there is no _b_, so it backtracks one position, goes through the outer loop once, and gives up again, trying to backtrack out of the inner loop once more. @@ -645,7 +645,7 @@ will take practically forever. {{index "replace method", "regular expression"}} -String values have a `replace` method, which can be used to replace +String values have a `replace` method that can be used to replace part of the string with another string. ``` @@ -836,10 +836,10 @@ When creating the `\b` ((boundary)) markers, we have to use two backslashes because we are writing them in a normal string, not a slash-enclosed regular expression. The second argument to the `RegExp` constructor contains the options for the regular expression—in this -case `"gi"` for global and case-insensitive. +case, `"gi"` for global and case-insensitive. But what if the name is `"dea+hl[]rd"` because our user is a ((nerd))y -teenager? That would result in a nonsensical regular expression, which +teenager? That would result in a nonsensical regular expression that won't actually match the user's name. {{index "backslash character", [escaping, "in regexps"], ["regular expression", escaping]}} @@ -861,7 +861,7 @@ console.log(text.replace(regexp, "_$&_")); {{index searching, ["regular expression", methods], "indexOf method", "search method"}} The `indexOf` method on strings cannot be called with a regular -expression. But there is another method, `search`, which does expect a +expression. But there is another method, `search`, that does expect a regular expression. Like `indexOf`, it returns the first index on which the expression was found, or -1 when it wasn't found. @@ -1047,7 +1047,7 @@ the file into separate lines is a good start. We used Some operating systems, however, use not just a newline character to separate lines but a carriage return character followed by a newline (`"\r\n"`). Given that the `split` method also allows a regular -expression as its argument, we can split on a regular expression like +expression as its argument, we can use a regular expression like `/\r?\n/` to split in a way that allows both `"\n"` and `"\r\n"` between lines. @@ -1153,7 +1153,7 @@ units, and the `{3}` part is applied only to the second one. Similarly, the dot matches a single code unit, not the two that make up the rose ((emoji)). -You must add an `u` option (for ((Unicode))) to your regular +You must add a `u` option (for ((Unicode))) to your regular expression to make it treat such characters properly. The wrong behavior remains the default, unfortunately, because changing that might cause problems for existing code that depends on it. @@ -1181,7 +1181,7 @@ that you need may not always be trivial. You can use the `\p{Property=Value}` notation to match any character that has the given value for that property. If the property name is left off, as in `\p{Name}`, the name is assumed to either be a binary property such as -`Alphabetic`, or a category such as `Number`. +`Alphabetic` or a category such as `Number`. {{id summary_regexp}} @@ -1222,7 +1222,7 @@ starting position of the match. Their `replace` method can replace matches of a pattern with a replacement string or function. Regular expressions can have options, which are written after the -closing slash. The `i` option makes the match case insensitive. The +closing slash. The `i` option makes the match case-insensitive. The `g` option makes the expression _global_, which, among other things, causes the `replace` method to replace all instances instead of just the first. The `y` option makes it sticky, which means that it will From c1ad76f15e299345e6aac85f86bdfc131e7c3dd1 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 20 Apr 2018 09:51:34 +0200 Subject: [PATCH 076/476] Integrate editing for Chapter 10 --- 10_modules.md | 86 ++++++++++++++++++++++++++------------------------- 20_node.md | 8 ++--- 2 files changed, 48 insertions(+), 46 deletions(-) diff --git a/10_modules.md b/10_modules.md index 5787c3c8f..d57d2bac4 100644 --- a/10_modules.md +++ b/10_modules.md @@ -14,8 +14,8 @@ quote}} {{index organization, "code structure"}} -The ideal program has a crystal clear structure. It's easy to explain -how it works, and each part plays a well-defined role. +The ideal program has a crystal clear structure. The way it works is +easy to explain, and each part plays a well-defined role. {{index "organic growth"}} @@ -47,22 +47,22 @@ dirty. _Modules_ are an attempt to avoid these problems. A ((module)) is a piece of program that specifies which other pieces it relies on (its -_dependencies_), and which functionality it provides for other modules +_dependencies_) and which functionality it provides for other modules to use (its _((interface))_). {{index "big ball of mud"}} Module interfaces have a lot in common with object interfaces, as we saw them in [Chapter ?](object#interface). They make part of the -module available to the outside world, and keep the rest private. By +module available to the outside world and keep the rest private. By restricting the ways in which modules interact with each other, the -system becomes more like ((Lego)), where pieces interact through +system becomes more like ((LEGO)), where pieces interact through well-defined connectors, and less like mud, where everything mixes with everything. {{index dependency}} -The relations between modules are called dependencies. When a module +The relations between modules are called _dependencies_. When a module needs a piece from another module, it is said to depend on that module. When this fact is clearly specified in the module itself, it can be used to figure out which other modules need to be present to be @@ -97,9 +97,9 @@ might be able to apply the same piece in different programs. But how do you set this up? Say I want to use the `parseINI` function from [Chapter ?](regexp#ini) in another program. If it is clear what -it depends on (in this case, nothing), I can just copy all the -necessary code into my new project, and use it. But then, if I find a -mistake in that code, I'll probably fix it in whichever program that +the function depends on (in this case, nothing), I can just copy all the +necessary code into my new project and use it. But then, if I find a +mistake in that code, I'll probably fix it in whichever program I'm working with at the time and forget to also fix it in the other program. @@ -141,8 +141,10 @@ can be found on there. For example, an INI file parser, similar to the one we built in [Chapter ?](regexp), is available under the package name `ini`. +{{index "command line"}} + [Chapter ?](node) will show how to install such packages locally using -the `npm` ((command line)) program. +the `npm` command-line program. Having quality packages available for download is extremely valuable. It means that we can often avoid reinventing a program that a hundred @@ -207,9 +209,9 @@ console.log(weekDay.name(weekDay.number("Sunday"))); This style of modules provides ((isolation)), to a certain degree, but it does not declare dependencies. Instead, it just puts its -((interface)) into the ((global scope)), and expects its dependencies, +((interface)) into the ((global scope)) and expects its dependencies, if any, to do the same. For a long time this was the main approach -used in web programming, but is mostly obsolete now. +used in web programming, but it is mostly obsolete now. If we want to make dependency relations part of the code, we'll have to take control of loading dependencies. Doing that requires being @@ -257,7 +259,7 @@ console.log(plusOne(4)); ``` This is precisely what we need for a module system. We can wrap the -module's code in a function, and use that function's scope as module +module's code in a function and use that function's scope as module ((scope)). ## CommonJS @@ -279,7 +281,7 @@ the module is loaded and returns its ((interface)). {{index "exports object"}} Because the loader wraps the module code in a function, modules -automatically get their own local scope. The only thing they have to +automatically get their own local scope. All they have to do is call `require` to access their dependencies, and put their interface in the object bound to `exports`. @@ -310,7 +312,7 @@ exports.formatDate = function(date, format) { if (tag == "dddd") return days[date.getDay()]; }); }; -```` +``` {{index "destructuring binding"}} @@ -381,10 +383,10 @@ available in the module's ((scope)). {{index resolution, "relative path"}} -The way the string given to `require` is translated to an actual file -name or web address differs in different systems. When it starts with +The way the string given to `require` is translated to an actual +filename or web address differs in different systems. When it starts with `"./"` or `"../"`, it is generally interpreted as relative to the -current module's file name. So `"./format-date"` would be the file +current module's filename. So `"./format-date"` would be the file named `format-date.js` in the same directory. When the name isn't relative, Node.js will look for an installed @@ -408,7 +410,7 @@ console.log(parse("x = 10\ny = 20")); ## ECMAScript modules -((CommonJS modules)) work quite well, and in combination with NPM they +((CommonJS modules)) work quite well and, in combination with NPM, have allowed the JavaScript community to start sharing code on a large scale. @@ -446,7 +448,7 @@ appear in front of a function, class, or binding definition (`let`, `const`, or `var`). An ES module's interface is not a single value, but a set of named -((binding))s. The above module binds `formatDate` to a function. When +((binding))s. The preceding module binds `formatDate` to a function. When you import from another module, you import the _binding_, not the value, which means an exporting module may change the value of the binding at any time, and the modules that import it will see its new @@ -477,13 +479,13 @@ console.log(dayNames.length); ``` At the time of writing, the JavaScript community is in the process of -adopting this module style. But this has been a slow process. It took +adopting this module style. But it has been a slow process. It took a few years, after the format was specified, for browsers and Node.js to start supporting it. And though they mostly support it now, this support still has issues, and the discussion on how such modules should be distributed through ((NPM)) is still ongoing. -Many projects are written using ES modules, and then automatically +Many projects are written using ES modules and then automatically converted to some other format when published. We are in a transitional period in which two different module systems are used side-by-side, and it is useful to be able to read and write code in @@ -502,14 +504,14 @@ JavaScript. To make this possible, they _compile_ their code, translating it from their chosen JavaScript dialect to plain old JavaScript—or even to a -past version of JavaScript so that old ((browsers)) can run it. +past version of JavaScript—so that old ((browsers)) can run it. {{index latency, performance}} -Including a modular program that consists of two hundred different +Including a modular program that consists of 200 different files in a ((web page)) produces its own problems. If fetching a single ((file)) over the ((network)) takes 50 milliseconds, loading -the whole program takes ten seconds, or maybe half that if you can +the whole program takes 10 seconds, or maybe half that if you can load several files simultaneously. That's a lot of wasted time. Because fetching a single big file tends to be faster than fetching a lot of tiny ones, web programmers have started using tools that roll @@ -544,7 +546,7 @@ Structuring programs is one of the subtler aspects of programming. Any nontrivial piece of functionality can be modeled in various ways. Good program design is subjective—there are trade-offs involved, and -matters of taste. The best way to learn the value of well structured +matters of taste. The best way to learn the value of well-structured design is to read or work on a lot of programs and notice what works and what doesn't. Don't assume that a painful mess is "just the way it is". You can improve the structure of almost everything by putting @@ -569,7 +571,7 @@ you're likely to remember how to use it. Even if there's no standard function or widely used package to imitate, you can keep your modules predictable by using simple ((data -structure))s and doing a single, focused thing. Many of the INI file +structure))s and doing a single, focused thing. Many of the INI-file parsing modules on NPM provide a function that directly reads such a file from the hard disk and parses it, for example. This makes it impossible to use such modules in the browser, where we don't have @@ -579,7 +581,7 @@ function. {{index "pure function"}} -Which points at another helpful aspect of module design—the ease with +Which points to another helpful aspect of module design—the ease with which something can be composed with other code. Focused modules that compute values are applicable in a wider range of programs than bigger modules that perform complicated actions with side effects. An INI @@ -611,8 +613,8 @@ An example of a slightly more complex data structure is the graph from properties hold arrays of strings—the other nodes reachable from that node. -There are several different path-finding packages on ((NPM)), but none -of them use this graph format. They usually allow the graph's edges to +There are several different pathfinding packages on ((NPM)), but none +of them uses this graph format. They usually allow the graph's edges to have a weight, the cost or distance associated with it, which isn't possible in our representation. @@ -645,9 +647,9 @@ console.log(find_path(graph, "Post Office", "Cabin")); ``` This can be a barrier to composition—when various packages are using -different data structures to describe similar things, it is difficult -to combine them. Therefore, if you want to design for composability, -find out what ((data structure))s other people are using, and when +different data structures to describe similar things, combining them +is difficult. Therefore, if you want to design for composability, +find out what ((data structure))s other people are using and, when possible, follow their example. ## Summary @@ -658,7 +660,7 @@ the part of the module that's visible from other modules, and the dependencies are the other modules that it makes use of. Because JavaScript historically did not provide a module system, the -CommonJS system was built on top of it. But at some point it _did_ get +CommonJS system was built on top of it. Then at some point it _did_ get a built-in system, which now coexists uneasily with the CommonJS system. @@ -696,7 +698,7 @@ would you create? Which module would depend on which other module, and what would their interfaces look like? Which pieces are likely to be available pre-written on NPM? Would you -prefer to use an NPM package or to write them yourself? +prefer to use an NPM package or write them yourself? {{hint @@ -708,7 +710,7 @@ way to design a given module): {{index "dijkstrajs package"}} The code used to build the road graph lives in the `graph` module. -Because I'd rather use `dijkstrajs` from NPM than our own path-finding +Because I'd rather use `dijkstrajs` from NPM than our own pathfinding code, we'll make this build the kind of graph data that `dijkstajs` expects. This module exports a single function, `buildGraph`. I'd have `buildGraph` accept an array of two-element arrays, rather than @@ -726,7 +728,7 @@ the `./roads` module, because it needs to be able to verify that a given road exists. It also needs `randomPick`. Since that is a three-line function, we could just put it into the `state` module as an internal helper function. But `randomRobot` needs it too. So we'd -have to either duplicate it, or put it into its own module. Since this +have to either duplicate it or put it into its own module. Since this function happens to exist on NPM in the `random-item` package, a good solution is to just make both modules depend on that. We can add the `runRobot` function to this module as well, since it's small and @@ -745,7 +747,7 @@ be read on its own. Dividing code into modules also often suggests further improvements to the program's design. In this case, it seems a little odd that the `VillageState` and the robots depend on a specific road graph. It might be a better idea to make the graph an argument to -the state's constructor and to make the robots read it from the state +the state's constructor and make the robots read it from the state object—this reduces dependencies (which is always good) and makes it possible to run simulations on different maps (which is even better). @@ -758,7 +760,7 @@ does tend to clutter your modules. However, you should also not underestimate the work involved in _finding_ an appropriate NPM package. And even if you find one, it -might not work well, or be missing some feature that you need. On top +might not work well or may be missing some feature you need. On top of that, depending on NPM packages means you have to make sure they are installed, you have to distribute them with your program, and you might have to periodically upgrade them. @@ -773,7 +775,7 @@ hint}} {{index "roads module (exercise)"}} Write a ((CommonJS module)), based on the example from [Chapter -?](robot), which contains the array of roads and exports the graph +?](robot), that contains the array of roads and exports the graph data structure representing them as `roadGraph`. It should depend on a module `./graph`, which exports a function `buildGraph` that is used to build the graph. This function expects an array of two-element @@ -829,8 +831,8 @@ don't access each other's interface until after they finish loading, cyclic dependencies are okay. The `require` function given [earlier in this -chapter](modules#require) supports this type of dependency cycles. Can -you see how it handles them? What would go wrong when a module in a +chapter](modules#require) supports this type of dependency cycle. Can +you see how it handles cycles? What would go wrong when a module in a cycle _does_ replace its default `exports` object? {{hint diff --git a/20_node.md b/20_node.md index 9ea7f70ce..ec18a2344 100644 --- a/20_node.md +++ b/20_node.md @@ -1051,11 +1051,11 @@ callback functions, and Node will call them with an error value and {{index grep, search, "search tool (exercise)"}} -On ((Unix)) systems, there is a command line tool called `grep` that +On ((Unix)) systems, there is a command-line tool called `grep` that can be used to quickly search files for a ((regular expression)). Write a Node script that can be run from the ((command line)) and acts -somewhat like `grep`. It treats its first command line argument as a +somewhat like `grep`. It treats its first command-line argument as a regular expression, and any further arguments as files to search. It should output the names of any file whose content matches the regular expression. @@ -1075,7 +1075,7 @@ amount, since most file systems can only read one thing at a time. {{index "RegExp class", "search tool (exercise)"}} -Your first command line argument, the ((regular expression)), can be +Your first command-line argument, the ((regular expression)), can be found in `process.argv[2]`. The input files come after that. You can use the `RegExp` constructor to go from a string to a regular expression object. @@ -1101,7 +1101,7 @@ capitalization—Node's file system function naming is loosely based on standard Unix functions, such as `readdir`, which are all lowercase, but then it adds `Sync` with a capital letter). -To go from a file name read with `readdir` to a full path name, you +To go from a filename read with `readdir` to a full path name, you have to combine it with the name of the directory, putting a ((slash character)) (`/`) between them. From 8ee9cdac5e3b8ed2b091fc2491bdbc339904257d Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 20 Apr 2018 10:23:39 +0200 Subject: [PATCH 077/476] Integrate tech editing for Chapter 5 --- 05_higher_order.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/05_higher_order.md b/05_higher_order.md index 3c4b6680b..2915cbdeb 100644 --- a/05_higher_order.md +++ b/05_higher_order.md @@ -422,7 +422,7 @@ the most characters. The higher-order operation that represents this pattern is called _reduce_ (sometimes also called _fold_). It builds a value by repeatedly taking a single element from the array and combining it -with the previous value. When summing numbers, you'd start with the +with the current value. When summing numbers, you'd start with the number zero and, for each element, add that to the sum. The parameters to `reduce` are, apart from the array, a combining @@ -704,7 +704,8 @@ console.log(countBy([1, 2, 3, 4, 5], n => n > 2)); ``` The `countBy` function expects a collection (anything that we can loop -over with `for`/`of`) and a grouping function. It returns an array of +over with `for`/`of`) and a function that computes a group name for a +given element. It returns an array of objects, each of which names a group and tells you the amount of elements that were found in that group. From 05960aad99e385d8ad0d34e72fca50b091c5e12b Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 24 Apr 2018 09:51:46 +0200 Subject: [PATCH 078/476] Integrate tech editing for Chapter 6 --- 06_object.md | 44 ++++++++++++++++++++++++++++---------------- img/rabbits.svg | 4 ++-- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/06_object.md b/06_object.md index 23d578240..7468c3bad 100644 --- a/06_object.md +++ b/06_object.md @@ -16,7 +16,7 @@ quote}} [Chapter ?](data) introduced JavaScript's ((object))s. In programming culture, we have a thing called _((object-oriented programming))_, a -set of techniques that uses objects (and related concepts) as the +set of techniques that use objects (and related concepts) as the central principle of program organization. Though no one really agrees on its precise definition, object-oriented @@ -297,7 +297,7 @@ function, and returned at the end of the function. {{index "prototype property"}} -The appropriate prototype object for a constructor is found by taking +The prototype object used when constructing objects is found by taking the `prototype` property of the constructor function. {{index "rabbit example"}} @@ -336,6 +336,15 @@ is `Function.prototype`, since constructors are functions. Its `prototype` _property_ holds the prototype used for instances created through it. +``` +console.log(Object.getPrototypeOf(Rabbit) == + Function.prototype); +// → true +console.log(Object.getPrototypeOf(weirdRabbit) == + Rabbit.prototype); +// → true +``` + ## Class notation So JavaScript ((class))es are ((constructor)) functions with a @@ -370,10 +379,11 @@ constructor definition from the previous section. It just looks nicer. {{index ["class declaration", properties]}} -Class declarations only allow _methods_—properties that hold +Class declarations currently only allow _methods_—properties that hold functions—to be added to the ((prototype)). This can be somewhat -inconvenient when you want to save a non-function value in there. You -can still create such properties by directly manipulating the +inconvenient when you want to save a non-function value in there. +The next version of the language will probably improve this. For now, you +can create such properties by directly manipulating the prototype after you've defined the class. Like `function`, `class` can be used both in statement and in @@ -392,9 +402,9 @@ console.log(object.getWord()); {{index "shared property", overriding}} When you add a ((property)) to an object, whether it is present in the -prototype or not, the property is added to the object _itself_, which -will henceforth have it as its own property. If there _is_ a property -by the same name in the prototype, this property will no longer affect +prototype or not, the property is added to the object _itself_. +If there was already a property with +the same name in the prototype, this property will no longer affect the object, as it is now hidden behind the object's own property. ``` @@ -524,6 +534,8 @@ console.log(`Júlia is ${ages.get("Júlia")}`); // → Júlia is 62 console.log("Is Jack's age known?", ages.has("Jack")); // → Is Jack's age known? false +console.log(ages.has("toString")); +// → false ``` {{index interface, "set method", "get method", "has method", encapsulation}} @@ -669,8 +681,8 @@ When called, that method should return an object that provides a second interface, _iterator_. This is the actual thing that iterates. It has a `next` method that returns the next result. That result should be an object with a `value` property, providing the next value, -and a `done` property, which should be true when there are no more -results and false otherwise. +if there is one, and a `done` property which should be true when there +are no more results and false otherwise. Note that the `next`, `value`, and `done` property names are plain strings, not symbols. Only `Symbol.iterator`, which is likely to be @@ -697,14 +709,14 @@ class, acting as a two-dimensional array. ```{includeCode: true} class Matrix { - constructor(width, height, content = (x, y) => undefined) { + constructor(width, height, element = (x, y) => undefined) { this.width = width; this.height = height; this.content = []; for (let y = 0; y < height; y++) { for (let x = 0; x < width; x++) { - this.content[y * width + x] = content(x, y); + this.content[y * width + x] = element(x, y); } } } @@ -895,10 +907,10 @@ the old class. ```{includeCode: "top_lines: 17"} class SymmetricMatrix extends Matrix { - constructor(size, content = (x, y) => undefined) { + constructor(size, element = (x, y) => undefined) { super(size, size, (x, y) => { - if (x < y) return content(y, x); - else return content(x, y); + if (x < y) return element(y, x); + else return element(x, y); }); } @@ -916,7 +928,7 @@ console.log(matrix.get(2, 3)); ``` The use of the word `extends` indicates that this class shouldn't be -based on the default `Object` prototype, but on some other class. This +directly based on the default `Object` prototype, but on some other class. This is called the _((superclass))_. The derived class is the _((subclass))_. diff --git a/img/rabbits.svg b/img/rabbits.svg index 2948b873e..5ee2dac16 100644 --- a/img/rabbits.svg +++ b/img/rabbits.svg @@ -1,5 +1,5 @@ - From 309712d315f4ff93508f6f7efc080b5fa0e16b43 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 24 Apr 2018 15:01:22 +0200 Subject: [PATCH 079/476] Add missing word in Chapter 20 --- 20_node.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/20_node.md b/20_node.md index ec18a2344..1e516314a 100644 --- a/20_node.md +++ b/20_node.md @@ -345,7 +345,7 @@ somewhat scary if random people could update existing packages. Since the `npm` program is a piece of software that talks to an open system—the package registry—there is nothing unique about what it does. Another program, `yarn`, which can be installed from the NPM -registry, fills the same role `npm` using a somewhat different +registry, fills the same role as `npm` using a somewhat different interface and installation strategy. This book won't delve further into the details of ((NPM)) usage. Refer From 5fde6f460aa39a5b8bad8d6a906e246c27d81036 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sat, 21 Apr 2018 13:23:39 -0400 Subject: [PATCH 080/476] Fix chapter 11 exercise 1 ReferenceError The solution stubs indicate that the functions take nest values, whereas the function call later on needs to call a specific nest, like bigOak --- 11_async.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/11_async.md b/11_async.md index 87dfd7d39..5caca487f 100644 --- a/11_async.md +++ b/11_async.md @@ -1276,7 +1276,7 @@ function locateScalpel2(nest) { // Your code here. } -locateScalpel(nest).then(console.log); +locateScalpel(bigOak).then(console.log); // → Butcher Shop ``` From 873ff63d4ea01f34d16361a6a24b8e0be6e98a9d Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 26 Apr 2018 09:19:20 +0200 Subject: [PATCH 081/476] Integrate editing for Chapter 11 --- 11_async.md | 72 ++++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/11_async.md b/11_async.md index 5caca487f..e7163ebc5 100644 --- a/11_async.md +++ b/11_async.md @@ -63,7 +63,7 @@ total time taken will be at least the sum of the two response times. {{index parallelism}} The solution to this problem, in a synchronous system, is to start -additional ((thread))s of control. A thread is another running program +additional ((thread))s of control. A _thread_ is another running program whose execution may be interleaved with other programs by the operating system—since most modern computers contain multiple processors, multiple threads may even run at the same time, on @@ -163,7 +163,7 @@ setTimeout(() => console.log("Tick"), 500); ``` Waiting is not generally a very important type of work, but it can be -useful when doing something like updating an animation or checking if +useful when doing something like updating an animation or checking whether something is taking longer than a given amount of ((time)). Performing multiple asynchronous actions in a row using callbacks @@ -281,7 +281,7 @@ in the future, return an object that represents this future event. {{index "Promise class", "asynchronous programming"}} -This is what the standard class `Promise` is for. A promise is an +This is what the standard class `Promise` is for. A _promise_ is an asynchronous action that may complete at some point and produce a value. It is able to notify anyone who is interested when its value is available. @@ -290,8 +290,8 @@ available. The easiest way to create a promise is by calling `Promise.resolve`. This function ensures that the value you give it is wrapped in a -promise. If it's already a promise it is simply returned, and -otherwise you get a new promise that immediately finishes with your +promise. If it's already a promise, it is simply returned—otherwise, +you get a new promise that immediately finishes with your value as its result. ``` @@ -348,7 +348,7 @@ storage(bigOak, "enemies") This asynchronous function returns a meaningful value. This is the main advantage of promises—they simplify the use of asynchronous functions. Instead of having to pass around callbacks, promise-based -functions look similar to regular ones: they take input as arguments, +functions look similar to regular ones: they take input as arguments and return their output. The only difference is that the output may not be available yet. @@ -394,13 +394,13 @@ exception in a handler function causes the rejection, the exception value is used as the reason. Similarly, when a handler returns a promise that is rejected, that rejection flows into the next promise. There's a `Promise.reject` function that creates a new, -immediately-rejected promise. +immediately rejected promise. {{index "catch method"}} -To explicitly handle such rejections, promises have a `catch` method, -which registers a handler to be called when the promise is rejected, -similar to how `then` handlers handle normal resolution. It also very +To explicitly handle such rejections, promises have a `catch` method +that registers a handler to be called when the promise is rejected, +similar to how `then` handlers handle normal resolution. It's also very much like `then` in that it returns a new promise, which resolves to the original promise's value if it resolves normally, and to the result of the `catch` handler otherwise. If a `catch` handler throws @@ -437,7 +437,7 @@ handled, and will report this as an error. {{index network}} Occasionally, there isn't enough light for the ((crow))s' mirror -systems to transmit a signal or something is blocking the path of the +systems to transmit a signal, or something is blocking the path of the signal. It is possible for a signal to be sent, but never received. {{index "send method", error, timeout}} @@ -456,14 +456,14 @@ times before it gives up. {{index "Promise class", "callback function", interface}} -And, since we've established that promises are a nice thing, we'll +And, since we've established that promises are a good thing, we'll also make our request function return a promise. In terms of what they can express, callbacks and promises are equivalent. Callback-based functions can be wrapped to expose a promise-based interface, and vice versa. Even when a ((request)) and its ((response)) are successfully -delivered, the response may indicate failure. For example if the +delivered, the response may indicate failure—for example, if the request tries to use a request type that hasn't been defined or the handler throws an error. To support this, `send` and `defineRequestType` follow the convention mentioned before, where the @@ -526,13 +526,13 @@ We'll write our handlers with that problem in mind—duplicate messages should be harmless. In general, we will not be building a world-class, robust network -today. But that's okay—crows don't have very high expectations yet, +today. But that's okay—crows don't have very high expectations yet when it comes to computing. {{index "defineRequestType function", "requestType function"}} To isolate ourselves from callbacks altogether, we'll go ahead and -also define a wrapper for `defineRequestType` which allows the handler +also define a wrapper for `defineRequestType` that allows the handler function to return a promise or plain value, and wires that up to the callback for us. @@ -605,7 +605,7 @@ When a neighbor isn't available, we don't want the entire combined promise to fail, since then we still wouldn't know anything. So the function that is mapped over the set of neighbors to turn them into request promises attaches handlers that make successful requests -produce `true`, and rejected ones `false`. +produce `true` and rejected ones produce `false`. {{index "filter method", "map method", "some method"}} @@ -696,7 +696,7 @@ would lead to a lot of useless data transfers. An alternative approach is to set up a way for messages to hop from node to node, until they reach their destination. The difficulty with that is that it requires knowledge about the layout of the network. To -send a request in the direction of a far-away nest, it is necessary to +send a request in the direction of a faraway nest, it is necessary to know which neighboring nest gets it closer to its destination. Sending it in the wrong direction will not do much good. @@ -754,9 +754,9 @@ every nest a map of the current network ((graph)). {{index pathfinding}} -A thing you can do with graphs is finding routes in them, as we saw in +A thing you can do with graphs is find routes in them, as we saw in [Chapter ?](robot). If we have a route towards a message's -destination, we know in which direction to send it. +destination, we know which direction to send it in. {{index "findRoute function"}} @@ -823,8 +823,8 @@ if}} {{index "[network, stack]"}} We've constructed several ((layer))s of functionality on top of a -primitive communication system, in order to make it convenient to use. -This is a nice (but simplified) model of how real computer networks +primitive communication system in order to make it convenient to use. +This is a nice (though simplified) model of how real computer networks work. {{index error}} @@ -902,7 +902,7 @@ one. In a synchronous programming model, it'd be simpler to express. The good news is that JavaScript allows you write pseudo-synchronous code. An `async` function is a function that implicitly returns a -promise, and that can, in its body `await` other promises in a way +promise and that can, in its body, `await` other promises in a way that _looks_ synchronous. {{index "findInStorage function"}} @@ -959,7 +959,7 @@ point that has an `await`, and resumed at a later time. For non-trivial asynchronous code, this notation is usually more convenient than directly using promises. Even if you need to do -something that doesn't fit the synchronous model, like performing +something that doesn't fit the synchronous model, such as perform multiple actions at the same time, it is easy to combine `await` with direct use of promises. @@ -1046,7 +1046,7 @@ result of the `await` expression. {{index "asynchronous programming", scheduling, "event loop", timeline}} Asynchronous programs are executed piece by piece. Each piece may -start some actions, and schedule code to be executed when the action +start some actions and schedule code to be executed when the action finishes or fails. In between these pieces, the program sits idle, waiting for the next action. @@ -1083,7 +1083,7 @@ No matter how closely together events—such as timeouts or incoming requests—happen, a JavaScript environment will only run one program at a time. You can think of this as it running a big loop _around_ your program, called the _event loop_. When there's nothing to be done, -that loop is stopped. But as events come in, they are added to a queue +that loop is stopped. But as events come in, they are added to a queue, and their code is executed one after the other. Because no two things run at the same time, slow-running code might delay the handling of other events. @@ -1128,8 +1128,8 @@ makes. For asynchronous programs this is different—they may have _gaps_ in their execution during which other code can run. Let's look at an example. One of the hobbies of our crows is to count -the amount of chicks that hatch throughout the village every year. -Nests store this count in their storage bulbs. The code below tries to +the number of chicks that hatch throughout the village every year. +Nests store this count in their storage bulbs. The following code tries to enumerate the counts from all the nests for a given year. {{index "anyStorage function", "chicks function"}} @@ -1215,8 +1215,8 @@ async function chicks(nest, year) { Mistakes like this are easy to make, especially when using `await`, and you should be aware of where the gaps in your code occur. An advantage of JavaScript's _explicit_ asynchronicity (whether through -callbacks, promises, or `await`) is that it's relatively easy to spot -these gaps. +callbacks, promises, or `await`) is that spotting these gaps is +relatively easy. ## Summary @@ -1308,7 +1308,7 @@ from the main function. In the `async` function, rejected promises are converted to exceptions by `await`. When an `async` function throws an exception, its promise -is rejects. So that works. +is rejected. So that works. If you implemented the non-`async` function as outlined above, the way `then` works also automatically causes a failure to end up in the @@ -1324,9 +1324,9 @@ hint}} Given an array of ((promise))s, `Promise.all` returns a promise that waits for all of the promises in the array to finish. It then -succeeds, yielding an array of result values. If any of the promises -in the array fail, the promise returned by `all` fails too, with the -failure value from the failing promise. +succeeds, yielding an array of result values. If a promise +in the array fails, the promise returned by `all` fails too, with the +failure reason from the failing promise. Implement something like this yourself as a regular function called `Promise_all`. @@ -1383,11 +1383,11 @@ promise if it was. {{index "counter variable"}} -The latter can be done with a counter which is initialized to the +The latter can be done with a counter that is initialized to the length of the input array and from which we subtract 1 every time a promise succeeds. When it reaches 0, we are done. Make sure you take -the situation where the input array is empty (and thus no promise will -ever resolve) into account. +into account the situation where the input array is empty (and thus no +promise will ever resolve). Handling failure requires some thought but turns out to be extremely simple. Just pass the `reject` function of the wrapping promise to From 47471cb153e51050909c01273e9eaf3415eae4dd Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 27 Apr 2018 10:51:20 +0200 Subject: [PATCH 082/476] Integrate editing for Chapter 12 --- 12_language.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/12_language.md b/12_language.md index 9342ea93b..c614a4299 100644 --- a/12_language.md +++ b/12_language.md @@ -52,7 +52,7 @@ To keep the parser simple, strings in Egg do not support anything like backslash escapes. A string is simply a sequence of characters that are not double quotes, wrapped in double quotes. A number is a sequence of digits. Binding names can consist of any character that is -not ((whitespace)) and does not have a special meaning in the syntax. +not ((whitespace)) and that does not have a special meaning in the syntax. {{index "comma character"}} @@ -474,7 +474,7 @@ console.log(evaluate(prog, topScope)); To supply basic ((arithmetic)) and ((comparison)) ((operator))s, we will also add some function values to the ((scope)). In the interest of keeping the code short, we'll use `Function` to synthesize a bunch -of operator functions in a loop, rather than defining them +of operator functions in a loop, instead of defining them individually. ```{includeCode: true} From 6fcecf8281c3b21e019c80bf292e4bdcf0c2546d Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 27 Apr 2018 16:11:58 +0200 Subject: [PATCH 083/476] Make Chapter 20 use Node 10's fs/promises module Instead of mz --- 20_node.md | 43 +++++++++++------------ code/solutions/20_2_directory_creation.js | 2 +- src/chapter_info.js | 2 +- 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/20_node.md b/20_node.md index 1e516314a..c6d7cf6cb 100644 --- a/20_node.md +++ b/20_node.md @@ -35,10 +35,11 @@ often won't run in the browser. if}} -If you want to follow along and run the code in this chapter, start by -going to [_nodejs.org_](https://nodejs.org) and following the -installation instructions for your operating system. You can also find -further ((documentation)) for Node.js there. +If you want to follow along and run the code in this chapter, you'll +need to install Node.js version 10 or higher. To do so, go to +[_nodejs.org_](https://nodejs.org) and follow the installation +instructions for your operating system. You can also find further +((documentation)) for Node.js there. ## Background @@ -429,18 +430,16 @@ result (the second). As we saw in [Chapter ?](async), there are downsides to this style of programming—the biggest one being that error handling becomes verbose and error-prone. -{{index "Promise class", "promisify function", "util package"}} +{{index "Promise class", "fs/promises package"}} Though promises have been part of JavaScript for a while, at the time -of writing the work to integrate them in Node.js is still in progress. -There is a `promisify` function in the built-in `util` module, which -you can call on a callback-style function to create a -promise-returning function. But since this is a little awkward, there -are also packages on NPM like `mz`, which provide their own, -promise-style version of built-in Node modules. +of writing their integration into Node.js is still a work in progress. +There is a package called `fs/promises` in the standard library since +version 10, which exports most of the same functions as `fs`, but +using promises rather than callback functions. ``` -const {readFile} = require("mz/fs"); +const {readFile} = require("fs/promises"); readFile("file.txt", "utf8") .then(text => console.log("The file contains:", text)); ``` @@ -845,14 +844,13 @@ knows the correct type for a large number of ((file extension))s. {{index "require function", "npm program"}} The following `npm` command, in the directory where the server script -lives, installs specific versions of `mime` and `mz`. We'll use the -latter as a source of promise-based `fs` functions. +lives, installs a specific version of `mime`. ```{lang: null} -$ npm install mime@2.2.0 mz@2.7.0 +$ npm install mime@2.2.0 ``` -{{index "404 (HTTP status code)", "stat function", "mz package"}} +{{index "404 (HTTP status code)", "stat function"}} When a requested file does not exist, the correct HTTP status code to return is 404. We'll use the `stat` function, which looks up @@ -861,7 +859,7 @@ and whether it is a ((directory)). ```{includeCode: ">code/file_server.js"} const {createReadStream} = require("fs"); -const {stat, readdir} = require("mz/fs"); +const {stat, readdir} = require("fs/promises"); const mime = require("mime"); methods.GET = async function(request) { @@ -886,7 +884,7 @@ methods.GET = async function(request) { Because it has to touch the disk and thus might take a while, `stat` is asynchronous. Since we're using promises rather than callback -style, it has to be imported from `mz/fs` instead of `fs`. +style, it has to be imported from `fs/promises` instead of `fs`. When the file does not exist `stat` will throw an error object with a `code` property of `"ENOENT"`. These somewhat obscure, @@ -912,7 +910,7 @@ content type that the `mime` package gives us for the file's name. The code to handle `DELETE` requests is slightly simpler. ```{includeCode: ">code/file_server.js"} -const {rmdir, unlink} = require("mz/fs"); +const {rmdir, unlink} = require("fs/promises"); methods.DELETE = async function(request) { let path = urlPath(request.url); @@ -1083,8 +1081,9 @@ expression object. {{index "readFileSync function"}} Doing this synchronously, with `readFileSync`, is more -straightforward, but if you use `mz` again to get promise-returning -functions and write an `async` function, the code looks similar. +straightforward, but if you use `fs/promises` again to get +promise-returning functions and write an `async` function, the code +looks similar. {{index "stat function", "statSync function", "isDirectory method"}} @@ -1124,7 +1123,7 @@ the _((WebDAV))_ standard, which specifies a set of conventions on top of ((HTTP)) that make it suitable for creating documents. ```{hidden: true, includeCode: ">code/file_server.js"} -const {mkdir} = require("mz/fs"); +const {mkdir} = require("fs/promises"); methods.MKCOL = async function(request) { let path = urlPath(request.url); diff --git a/code/solutions/20_2_directory_creation.js b/code/solutions/20_2_directory_creation.js index 7b4d2714c..13792033d 100644 --- a/code/solutions/20_2_directory_creation.js +++ b/code/solutions/20_2_directory_creation.js @@ -1,7 +1,7 @@ // This code won't work on its own, but is also included in the // code/file_server.js file, which defines the whole system. -const {mkdir} = require("mz/fs"); +const {mkdir} = require("fs/promises"); methods.MKCOL = async function(request) { let path = urlPath(request.url); diff --git a/src/chapter_info.js b/src/chapter_info.js index 68d7d0659..0a08e4036 100644 --- a/src/chapter_info.js +++ b/src/chapter_info.js @@ -7,7 +7,7 @@ let fs = require("fs"); let output = [], failed = false; -let allSolutions = fs.readdirSync("code/solutions/").filter(file => !/^2[012]/.test(file)); +let allSolutions = fs.readdirSync("code/solutions/").filter(file => !/^(\.|2[012])/.test(file)); for (let file of fs.readdirSync(".").sort()) { let match = /^((\d+).*).md$/.exec(file), chapNum = match && match[2]; From 140179666b9ba7d2ab0fe772d816a9e245f77d93 Mon Sep 17 00:00:00 2001 From: Dave Eckhardt Date: Sat, 28 Apr 2018 20:00:03 -0400 Subject: [PATCH 084/476] Add missing word in Chapter 17 --- 17_canvas.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/17_canvas.md b/17_canvas.md index 38a801565..e6a90c288 100644 --- a/17_canvas.md +++ b/17_canvas.md @@ -307,7 +307,7 @@ determine the curvature of the line, the method is given a ((control point)) as well as a destination point. Imagine this control point as _attracting_ the line, giving it its curve. The line won't go through the control point, but its direction at the start and end points will -be such that a straight in that direction would point towards the +be such that a straight line in that direction would point towards the control point. The following example illustrates this: ```{lang: "text/html"} From 1d27233ee2fa6c6e1590d04c6c6963fe6ba59c77 Mon Sep 17 00:00:00 2001 From: Dave Eckhardt Date: Sat, 28 Apr 2018 19:56:13 -0400 Subject: [PATCH 085/476] Fix singular/plural glitch in level description in Chapter 16 --- 16_game.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/16_game.md b/16_game.md index 386e1b5b5..9437fdbb8 100644 --- a/16_game.md +++ b/16_game.md @@ -133,7 +133,7 @@ var simpleLevelPlan = ` Periods are empty space, hash ("#") characters are walls, and plus signs are lava. The ((player))'s starting position is the ((at sign)) -(`@`). Every O characters is a coin, and the equals sign (`=`) at the +(`@`). Every O character is a coin, and the equals sign (`=`) at the top is a block of lava that moves back and forth horizontally. {{index bouncing}} From 8dd30ebd0dec42ce3ad332ff402e23999747e68d Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 30 Apr 2018 10:49:15 +0200 Subject: [PATCH 086/476] Clarify sentence in Chapter 15 Issue #436 --- 15_event.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/15_event.md b/15_event.md index a8f9a20d5..e675b1d74 100644 --- a/15_event.md +++ b/15_event.md @@ -64,8 +64,8 @@ argument occurs. {{index "addEventListener method", "event handling", "window object"}} -Each ((browser)) event handler is registered in a context. We called -`addEventListener` on the `window` object before to register a handler +Each ((browser)) event handler is registered in a context. In the last example we called +`addEventListener` on the `window` object to register a handler for the whole window. Such a method can also be found on ((DOM)) elements and some other types of objects. Event listeners are only called when the event happens in the context of the object they are From 4b4e0aeabbe28be05901284d40e6f5f98e16ab8b Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 2 May 2018 10:29:13 +0200 Subject: [PATCH 087/476] Integrate tech editing for Chapter 8 --- 08_error.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/08_error.md b/08_error.md index cc74d19bf..35db6c191 100644 --- a/08_error.md +++ b/08_error.md @@ -161,7 +161,7 @@ You could add a comment like this above the `goalOrientedRobot` function from the last chapter, to describe its type. ``` -// (WorldState, Array) → {direction: string, memory: Array} +// (VillageState, Array) → {direction: string, memory: Array} function goalOrientedRobot(state, memory) { // ... } @@ -603,7 +603,7 @@ leaving, it notices that it was aborted at a point where it had created an inconsistent program state, it repairs the damage it did. Note that, even though the `finally` code is run when an exception -leaves the `try` block, it does not interfere with the exception. +is thrown in the `try` block, it does not interfere with the exception. After the `finally` block runs, the stack continues unwinding. {{index "exception safety"}} @@ -861,7 +861,7 @@ block. The corresponding `catch` block should rethrow the exception when it is not an instance of `MultiplicatorUnitFailure` and ensure the call is retried when it is. -To do the retrying, you can either use a loop that breaks only when a +To do the retrying, you can either use a loop that stops only when a call succeeds—as in the [`look` example](error#look) earlier in this chapter—or use ((recursion)) and hope you don't get a string of failures so long that it overflows the stack (which is a pretty safe From 4a6c3c58dee7140f51e4e8c54969af753c9b1f41 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 2 May 2018 11:11:26 +0200 Subject: [PATCH 088/476] Integrate editing for Chapter 13 --- 13_browser.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/13_browser.md b/13_browser.md index cda3afb86..b95245fdf 100644 --- a/13_browser.md +++ b/13_browser.md @@ -19,9 +19,9 @@ no one would ever have paid any attention to it. Web technology has, from the start, been decentralized, not just technically but also in the way it evolved. Various browser vendors -have added new functionality in ad hoc and sometimes poorly thought -out ways, which then, sometimes, ended up being adopted by others—and -finally set down as a ((standard)). +have added new functionality in ad hoc and sometimes poorly thought-out +ways, which then, sometimes, ended up being adopted by others—and +finally set down as in ((standards)). This is both a blessing and a curse. On the one hand, it is empowering to not have a central party control a system but have it be improved @@ -53,7 +53,7 @@ on the kind of thing that it is trying to express and on the A _network ((protocol))_ describes a style of communication over a ((network)). There are protocols for sending email, for fetching email, -for sharing files, or even for controlling computers that happen to be +for sharing files, and even for controlling computers that happen to be infected by malicious software. {{indexsee "Hypertext Transfer Prototol", HTTP}} @@ -68,7 +68,7 @@ the version of the protocol that it is trying to use. GET /index.html HTTP/1.1 ``` -There's a lot more rules about the way the requester can include more +There are a lot more rules about the way the requester can include more information in the ((request)) and the way the other side, which returns the resource, packages up its content. We'll look at HTTP in a little more detail in [Chapter ?](http). @@ -158,7 +158,7 @@ domain name to serve web pages. {{index browser}} -If you type the URL we saw into your browser's ((address bar)), it +If you type this URL into your browser's ((address bar)), the browser will try to retrieve and display the ((document)) at that URL. First, your browser has to find out what address _eloquentjavascript.net_ refers to. Then, using the ((HTTP)) protocol, it will make a @@ -220,8 +220,8 @@ _about_ the document, and the body contains the document itself. In this case, the head declares that the title of this document is "My home page" and that it uses the UTF-8 encoding, which is a way to encode Unicode text as binary data. The document's body contains a -heading (`

`, meaning "heading 1"—`

` to `

` produce more -minor headings) and two ((paragraph))s (`

`). +heading (`

`, meaning "heading 1"—`

` to `

` produce +subheadings) and two ((paragraph))s (`

`). {{index "href attribute", "a (HTML tag)"}} @@ -247,7 +247,7 @@ even though they have a special meaning in HTML, yet another form of special notation has to be introduced. A plain opening angle bracket is written as `<` ("less than"), and a closing bracket is written as `>` ("greater than"). In HTML, an ampersand (`&`) character -followed by a word and a semicolon (`;`) is called an _((entity))_, +followed by a name or character code and a semicolon (`;`) is called an _((entity))_, and will be replaced by the character it encodes. {{index "backslash character", "ampersand character", "double-quote character"}} @@ -298,7 +298,7 @@ I will also usually omit the ((doctype)) and `charset` declaration. This is not to be taken as an encouragement to drop these from HTML documents. Browsers will often do ridiculous things when you forget them. You should consider the doctype and the `charset` metadata -implicitly present in examples, even when they are not actually shown +to be implicitly present in examples, even when they are not actually shown in the text. {{id script_tag}} @@ -337,7 +337,7 @@ program) from a URL. The _code/hello.js_ file included here contains the same program—`alert("hello!")`. When an HTML page references other URLs as -part of itself, for example an image file or a script—web browsers +part of itself—for example, an image file or a script—web browsers will retrieve them immediately and include them in the page. {{index "script (HTML tag)", "closing tag"}} @@ -420,7 +420,7 @@ the market. After a few years, the balance had shifted to Microsoft's ((Internet Explorer)). At any point where a single ((browser)) was dominant, that browser's vendor would feel entitled to unilaterally invent new features for the Web. Since most users used -the same browser, ((website))s would simply start using those +the most popular browser, ((website))s would simply start using those features—never mind the other browsers. This was the dark age of ((compatibility)), often called the From a92e698b8ad9b27c34706b1e0e518c33699c5509 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 2 May 2018 11:16:01 +0200 Subject: [PATCH 089/476] Integrate editing for Chapter 14 --- 14_dom.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/14_dom.md b/14_dom.md index 822bf9068..62c114e3a 100644 --- a/14_dom.md +++ b/14_dom.md @@ -158,7 +158,7 @@ numbers to access the child nodes. But it is an instance of the Then there are issues that are simply poor design. For example, there is no way to create a new node and immediately add children or -((attribute))s to it. Instead, you have to first create it, then add +((attribute))s to it. Instead, you have to first create it, and then add the children and attributes one by one, using side effects. Code that interacts heavily with the DOM tends to get long, repetitive, and ugly. @@ -200,8 +200,8 @@ child, `nextSibling` will be null. {{index "children property", "text node", element}} -There's also the `children` property, which is like `childNodes`, but -which only contains element (type 1) children, not other types of +There's also the `children` property, which is like `childNodes` but +contains only element (type 1) children, not other types of child nodes. This can be useful when you aren't interested in text nodes. @@ -234,7 +234,7 @@ console.log(talksAbout(document.body, "book")); {{index "childNodes property", "array-like object"}} -Because `childNodes` is not a real array, we can not loop over it with +Because `childNodes` is not a real array, we cannot loop over it with `for`/`of` and have to run over the index range using a regular `for` loop. @@ -254,7 +254,7 @@ of properties is a bad idea. Doing so bakes assumptions into our program about the precise structure of the document—a structure you might want to change later. Another complicating factor is that text nodes are created even for the ((whitespace)) between nodes. The -example document's body tag does not have just three children (`

` +example document's `` tag does not have just three children (`

` and two `

` elements) but actually has seven: those three, plus the spaces before, after, and between them. @@ -373,7 +373,7 @@ to replace them. Text nodes are created with the {{index "text node"}} -Given a string, `createTextNode` gives us a text node, which we can +Given a string, `createTextNode` gives us a text node that we can insert into the document to make it show up on the screen. {{index "live data structure", "getElementsByTagName method", "childNodes property"}} @@ -460,7 +460,7 @@ object. This is the case for most commonly used standard attributes. But HTML allows you to set any attribute you want on nodes. This can be useful because it allows you to store extra information in a document. If you make up your own attribute names, though, such -attributes will not be present as a property on the element's node. +attributes will not be present as properties on the element's node. Instead, you have to use the `getAttribute` and `setAttribute` methods to work with them. @@ -608,14 +608,14 @@ one takes. We have seen that different HTML elements are drawn differently. Some are displayed as blocks, others inline. Some add styling—`` -makes its content ((bold)) and `` makes it blue and underlines it. +makes its content ((bold)), and `` makes it blue and underlines it. {{index "img (HTML tag)", "default behavior", "style attribute"}} The way an `` tag shows an image or an `` tag causes a link to be followed when it is clicked is strongly tied to the element type. -But the default styling associated with an element, such as the text -color or underline, can be changed by us. Here is an example that uses +But we can change the styling associated with an element, such +as the text color or underline. Here is an example that uses the `style` property: ```{lang: "text/html"} @@ -640,7 +640,7 @@ separated by ((semicolon))s, as in `"color: red; border: none"`. {{index "display (CSS)", layout}} -There are a lot of aspects of the document that can be influenced by +A lot of aspects of the document can be influenced by styling. For example, the `display` property controls whether an element is displayed as a block or an inline element. @@ -699,7 +699,7 @@ letters after them capitalized (`style.fontFamily`). {{indexsee "Cascading Style Sheets", CSS}} -The styling system for HTML is called ((CSS)) for _Cascading Style +The styling system for HTML is called ((CSS)), for _Cascading Style Sheets_. A _((style sheet))_ is a set of rules for how to style elements in a document. It can be given inside a `

- +
+ +

Contents

  1. Introduction @@ -94,6 +103,10 @@

    (Part 3: Node)

  2. Project: Skill-Sharing Website
+
+ + From 5ceee43bdab53e3c337000f560719fec7d9bca3d Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Mon, 7 May 2018 17:07:21 +0200 Subject: [PATCH 101/476] Fix alignment of part headers in TOC --- html/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/html/index.html b/html/index.html index c89d9a86b..4566eda0c 100644 --- a/html/index.html +++ b/html/index.html @@ -7,10 +7,10 @@ From 90b7ef422e0caab8f68b1c5b5cecec97e342c6cf Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 11 May 2018 14:00:17 +0200 Subject: [PATCH 105/476] Rip out canvas dependency It appears to no longer even be necessary with current jsdom, and doesn't build cleanly on node 10 Issue #189 --- package.json | 1 - src/run_tests.js | 2 -- 2 files changed, 3 deletions(-) diff --git a/package.json b/package.json index d143edc51..de10280ff 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,6 @@ "uglify-js": "^2.0.0" }, "devDependencies": { - "canvas": "^1.6.7", "jsdom": "^11.2.0", "promise": "^8.0.1" }, diff --git a/src/run_tests.js b/src/run_tests.js index 7d63df8b1..19ea4f423 100644 --- a/src/run_tests.js +++ b/src/run_tests.js @@ -209,8 +209,6 @@ function report(err) { console.log("error raised (" + _console.pos + "): " + msg, err.stack) } -require("canvas/lib/context2d").prototype.drawImage = function() {} - // Gruesome kludgery to make the node chapter tests run let fakeFS = {} From 531c5cea9f643f839503aa767fe36ed221e5c418 Mon Sep 17 00:00:00 2001 From: fenekku Date: Thu, 10 May 2018 08:33:30 -0400 Subject: [PATCH 106/476] Add missing 'to' --- 06_object.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/06_object.md b/06_object.md index 13af98b19..7a36f3fbb 100644 --- a/06_object.md +++ b/06_object.md @@ -470,7 +470,7 @@ console.log(Object.prototype.toString.call([1, 2])); We saw the word _map_ used in the [previous chapter](higher_order#map) for an operation that transforms a data structure by applying a -function its elements. Confusing as it is, in programming the same +function to its elements. Confusing as it is, in programming the same word is also used for a related but rather different thing. {{index "map (data structure)", "ages example", "data structure"}} From c94701501e8534d59eed9f131b6bd5b7a470ed77 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 11 May 2018 14:46:21 +0200 Subject: [PATCH 107/476] Integrate tech editing for Chapter 11 --- 11_async.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/11_async.md b/11_async.md index ed1995916..72fab7da8 100644 --- a/11_async.md +++ b/11_async.md @@ -383,7 +383,7 @@ and rejections are automatically propagated to the new promise that is returned by `then`. And when a handler throws an exception, this automatically causes the promise produced by its `then` call to be rejected. So if any element in a chain of asynchronous actions fails, -the outcome of the whole chain is marked as rejected, and no regular +the outcome of the whole chain is marked as rejected, and no success handlers are called beyond the point where it failed. {{index "Promise.reject function", "Promise class"}} @@ -426,6 +426,18 @@ and their outcome determines what kind of value comes next—success when it returns a non-promise value, rejection when it throws an exception, and the outcome of a promise when it returns one of those. +```{test: no} +new Promise((_, reject) => reject(new Error("Fail"))) + .then(value => console.log("Handler 1")) + .catch(reason => { + console.log("Caught failure " + reason); + return "nothing"; + }) + .then(value => console.log("Handler 2", value)); +// → Caught failure Error: Fail +// → Handler 2 nothing +``` + {{index "uncaught exception", "exception handling"}} Much like an uncaught exception is handled by the environment, @@ -901,7 +913,8 @@ one. In a synchronous programming model, it'd be simpler to express. {{index "async function", "await keyword"}} The good news is that JavaScript allows you write pseudo-synchronous -code. An `async` function is a function that implicitly returns a +code to describe asynchronous computation. An `async` function is a +function that implicitly returns a promise and that can, in its body, `await` other promises in a way that _looks_ synchronous. From 3c008777852748af8c4be33700a92fe305f6cc10 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Fri, 11 May 2018 14:50:55 +0200 Subject: [PATCH 108/476] Integrate editing for Chapter 16 --- 16_game.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/16_game.md b/16_game.md index 420d2a207..28fc13147 100644 --- a/16_game.md +++ b/16_game.md @@ -30,7 +30,7 @@ amusing. This chapter will walk through the implementation of a small ((platform game)). Platform games (or "jump and run" games) are games that expect the ((player)) to move a figure through a ((world)), which -is usually two-dimensional and viewed from the side, jumping over and +is usually two-dimensional and viewed from the side, while jumping over and onto things. ## The game @@ -55,7 +55,7 @@ the yellow boxes (coins) while avoiding the red stuff (lava). A The player can walk around with the left and right arrow keys, and jump with the up arrow. Jumping is a specialty of this game character. -It can reach several times its own height and is able to change +It can reach several times its own height and can change direction in midair. This may not be entirely realistic, but it helps give the player the feeling of being in direct control of the onscreen ((avatar)). @@ -133,7 +133,7 @@ var simpleLevelPlan = ` {{index level}} -Periods are empty space, hash ("#") characters are walls, and plus +Periods are empty space, hash (`#`) characters are walls, and plus signs are lava. The ((player))'s starting position is the ((at sign)) (`@`). Every O character is a coin, and the equals sign (`=`) at the top is a block of lava that moves back and forth horizontally. @@ -198,11 +198,11 @@ field types like `"empty"`, `"wall"`, or `"lava"`. {{index "map method"}} -To create these arrays we map over the rows, and then over their +To create these arrays, we map over the rows and then over their content. Remember that `map` passes the array index as a second argument to the mapping function, which tells us the the x- and y-coordinates of a given character. Positions in the game will be -stored as pairs of coordinates, with the top left being 0,0, and each +stored as pairs of coordinates, with the top left being 0,0 and each background square being 1 unit high and wide. {{index "static method"}} @@ -629,7 +629,7 @@ To give an element more than one class, we separate the class names by spaces. In the ((CSS)) code shown next, the `actor` class gives the actors their absolute position. Their type name is used as an extra class to give them a color. We don't have to define the `lava` class -again because we reuse the class for the lava grid squares which we +again because we're reusing the class for the lava grid squares we defined earlier. ```{lang: "text/css"} @@ -901,7 +901,7 @@ State.prototype.update = function(time, keys) { }; ``` -It is passed a time step and a data structure that tells it which keys +The method is passed a time step and a data structure that tells it which keys are being held down. The first thing it does is call the `update` method on all actors, producing an array of updated actors. The actors also get the time step, the keys, and the state, so that they can base @@ -929,7 +929,7 @@ function overlap(actor1, actor2) { If any actor does overlap, its `collide` method gets a chance to update the state. Touching a lava actor sets the game status to -`"lost"`, coins vanish when you touch them, and set the status to +`"lost"`, coins vanish when you touch them and set the status to `"won"` when this was the last coin. ```{includeCode: true} @@ -970,7 +970,7 @@ Lava.prototype.update = function(time, state) { {{index bouncing, multiplication, "Vect class", "collision detection"}} -It computes a new position by adding the product of the ((time)) step +This `update` method computes a new position by adding the product of the ((time)) step and the current speed to its old position. If no obstacle blocks that new position, it moves there. If there is an obstacle, the behavior depends on the type of the ((lava)) block—dripping lava has a `reset` @@ -1213,7 +1213,7 @@ async function runGame(plans, Display) { Because we made `runLevel` return a promise, `runGame` can be written using an `async` function, as seen in [Chapter ?](async). It returns -another promise, which resolves when the player finished the game. +another promise, which resolves when the player finishes the game. {{index game, "GAME_LEVELS data set"}} From 97635e6cad14dc37eb54208448f73ec1c1fea90a Mon Sep 17 00:00:00 2001 From: fenekku Date: Fri, 11 May 2018 10:30:23 -0400 Subject: [PATCH 109/476] Link to Chapter 7 programming environment While trying to make sure I didn't break anything in the pdf, I realized I wasn't able to build it. So I fixed the needed packages, but there seems to be a missing file (book.idx I think?) that still prevents `make book.pdf` from running properly. --- 07_robot.md | 7 ++++--- README.md | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/07_robot.md b/07_robot.md index 75578d45b..076415982 100644 --- a/07_robot.md +++ b/07_robot.md @@ -347,9 +347,10 @@ isn't planning ahead very well. We'll address that soon. {{if interactive For a more pleasant perspective on the simulation, you can use the -`runRobotAnimation` function that's available in this chapter's -programming environment. This runs the simulation, but instead of -outputting text, it shows you the robot moving around the village map. +`runRobotAnimation` function that's available in [this chapter's +programming environment](https://eloquentjavascript.net/code/#7). +This runs the simulation, but instead of outputting text, it shows +you the robot moving around the village map. ```{test: no} runRobotAnimation(VillageState.random(), randomRobot); diff --git a/README.md b/README.md index d3708def0..32d8a8c38 100644 --- a/README.md +++ b/README.md @@ -12,5 +12,5 @@ Feedback welcome, in the form of issues and pull requests. To build the PDF file: - apt-get install texlive texlive-xetex fonts-inconsolata fonts-symbola texlive-fonts-chinese + apt-get install texlive texlive-xetex fonts-inconsolata fonts-symbola texlive-lang-chinese inkscape make book.pdf From 1d0389cafaa00e33a0592ec80cfb113911e15942 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Sat, 12 May 2018 23:22:12 +0200 Subject: [PATCH 110/476] Don't pre-load code that adds 'peanut teeth' event in Chapter 4 --- 04_data.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04_data.md b/04_data.md index 2f32e9fd8..0191aaaa1 100644 --- a/04_data.md +++ b/04_data.md @@ -799,7 +799,7 @@ a significant negative effect. Interesting. Let's try something. -```{includeCode: strip_log} +``` for (let entry of JOURNAL) { if (entry.events.includes("peanuts") && !entry.events.includes("brushed teeth")) { From ad92d27e96d944da40630b00d2aecfce6905255c Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 15 May 2018 09:07:39 +0200 Subject: [PATCH 111/476] Integrate editing for Chapter 17 --- 17_canvas.md | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/17_canvas.md b/17_canvas.md index e84109f40..053af26a2 100644 --- a/17_canvas.md +++ b/17_canvas.md @@ -435,7 +435,7 @@ if}} {{index "pie chart example"}} Imagine you've just taken a ((job)) at EconomiCorp, Inc., and your -first assignment is to draw a pie chart of their customer satisfaction +first assignment is to draw a pie chart of its customer satisfaction ((survey)) results. The `results` binding contains an array of objects that represent the @@ -630,7 +630,7 @@ up an interval (repeated timer) to draw the next ((frame)): {{index "remainder operator", "% operator"}} -The `cycle` binding tracks our position in the ((animation)). Each +The `cycle` binding tracks our position in the ((animation)). For each ((frame)), it is incremented and then clipped back to the 0 to 7 range by using the remainder operator. This binding is then used to compute the x-coordinate that the sprite for the current pose has in the @@ -686,7 +686,7 @@ be position -100. {{index "drawImage method"}} So to turn a picture around, we can't simply add `cx.scale(-1, 1)` -before the call to `drawImage` since that would move our picture +before the call to `drawImage` because that would move our picture outside of the ((canvas)), where it won't be visible. You could adjust the ((coordinates)) given to `drawImage` to compensate for this by drawing the image at x position -50 instead of 0. Another solution, @@ -782,10 +782,10 @@ It is possible to save the current transformation, do some drawing and transforming, and then restore the old transformation. This is usually the proper thing to do for a function that needs to temporarily transform the coordinate system. First, we save whatever -transformation the code that called the function was using. Then, the +transformation the code that called the function was using. Then the function does its thing (on top of the existing transformation), possibly adding more transformations. And finally, we revert to the -transformation that we started with. +transformation we started with. {{index "save method", "restore method"}} @@ -801,7 +801,7 @@ transformation. The `branch` function in the following example illustrates what you can do with a function that changes the transformation and then calls -another function (in this case itself), which continues drawing with +a function (in this case itself), which continues drawing with the given transformation. This function draws a treelike shape by drawing a line, moving the @@ -899,7 +899,7 @@ class CanvasDisplay { } ``` -The `setState` method first computes a new viewport, and then draws +The `setState` method first computes a new viewport and then draws the game scene at the appropriate position. ```{sandbox: "game", includeCode: true} @@ -915,7 +915,7 @@ CanvasDisplay.prototype.setState = function(state) { Contrary to `DOMDisplay`, this display style _does_ have to redraw the background on every update. Because shapes on a canvas are just -((pixel))s, after we draw them, there is no good way to move them (or +((pixel))s, after we draw them there is no good way to move them (or remove them). The only way to update the canvas display is to clear it and redraw the scene. We may also have scrolled, which requires the background to be in a different position. @@ -952,8 +952,8 @@ CanvasDisplay.prototype.updateViewport = function(state) { The calls to `Math.max` and `Math.min` ensure that the viewport does not end up showing space outside of the level. `Math.max(x, 0)` makes -sure the resulting number is not less than zero. `Math.min`, -similarly, guarantees that a value stays below a given bound. +sure the resulting number is not less than zero. `Math.min` +similarly guarantees that a value stays below a given bound. When ((clearing)) the display, we'll use a slightly different ((color)) depending on whether the game is won (brighter) or lost @@ -1158,8 +1158,8 @@ blocks of text. {{index zooming, SVG}} SVG can be used to produce ((crisp)) ((graphics)) that look good at -any zoom level. Contrary to HTML, it is actually designed for drawing, -and thus more suitable for that purpose. +any zoom level. Unlike HTML, it is designed for drawing +and is thus more suitable for that purpose. {{index DOM, SVG, "event handling"}} @@ -1182,7 +1182,7 @@ pixel surface gives canvas a lower cost per shape. {{index "ray tracer"}} There are also effects, such as rendering a scene one pixel at a time -(for example using a ray tracer) or postprocessing an image with +(for example, using a ray tracer) or postprocessing an image with JavaScript (blurring or distorting it), that can be realistically handled only by a ((pixel))-based approach. @@ -1341,11 +1341,11 @@ hint}} [Earlier](canvas#pie_chart) in the chapter, we saw an example program that drew a pie chart. Modify this program so that the name of each category is shown next to the slice that represents it. Try to find a -pleasing-looking way to automatically position this text, which would +pleasing-looking way to automatically position this text that would work for other data sets as well. You may assume that categories are big enough to leave ample room for their labels. -You might again need `Math.sin` and `Math.cos`, as described in +You might need `Math.sin` and `Math.cos` again, which are described in [Chapter ?](dom#sin_cos). {{if interactive @@ -1390,7 +1390,7 @@ but rather move the text out to the side of the pie by a given number of pixels. The ((angle)) of this line is `currentAngle + 0.5 * sliceAngle`. The -following code finds a position on this line, 120 pixels from the +following code finds a position on this line 120 pixels from the center: ```{test: no} @@ -1400,9 +1400,9 @@ let textY = Math.sin(middleAngle) * 120 + centerY; ``` For `textBaseline`, the value `"middle"` is probably appropriate when -using this approach. What to use for `textAlign` depends on the side +using this approach. What to use for `textAlign` depends on which side of the circle we are on. On the left, it should be `"right"`, and on -the right, it should be `"left"` so that the text is positioned away +the right, it should be `"left"`, so that the text is positioned away from the pie. {{index "Math.cos function"}} @@ -1464,8 +1464,8 @@ whole circle. Then fill the path. To model the ball's position and ((speed)), you can use the `Vec` class from [Chapter ?](game#vector)[ (which is available on this page)]{if interactive}. Give it a starting speed, preferably one that -is not purely vertical or horizontal, and every ((frame)), multiply -that speed with the amount of time that elapsed. When the ball gets +is not purely vertical or horizontal, and for every ((frame)) multiply +that speed by the amount of time that elapsed. When the ball gets too close to a vertical wall, invert the x component in its speed. Likewise, invert the y component when it hits a horizontal wall. @@ -1481,9 +1481,9 @@ hint}} {{index optimization, "bitmap graphics", mirror}} One unfortunate thing about ((transformation))s is that they slow down -drawing of bitmaps. The position and size of each ((pixel)) has to be -transformed, and though it is possible that ((browser))s will get more -clever about this in the ((future)), this currently causes a +the drawing of bitmaps. The position and size of each ((pixel)) has to be +transformed, and though it is possible that ((browser))s will get +cleverer about transformation in the ((future)), they currently cause a measurable increase in the time it takes to draw a bitmap. In a game like ours, where we are drawing only a single transformed From e232dd328a5491acfcb7750624e41c2c08bdbe4f Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 15 May 2018 09:13:56 +0200 Subject: [PATCH 112/476] Integrate tech editing for Chapter 12 --- code/solutions/12_1_arrays.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/solutions/12_1_arrays.js b/code/solutions/12_1_arrays.js index f31d7bcd8..e857c914b 100644 --- a/code/solutions/12_1_arrays.js +++ b/code/solutions/12_1_arrays.js @@ -1,8 +1,8 @@ -topEnv.array = (...values) => values; +topScope.array = (...values) => values; -topEnv.length = array => array.length; +topScope.length = array => array.length; -topEnv.element = (array, i) => array[i]; +topScope.element = (array, i) => array[i]; run(` do(define(sum, fun(array, From 91508db3dc5be56357e91e083be98ba735512671 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Wed, 16 May 2018 08:46:29 +0200 Subject: [PATCH 113/476] Link to Amazon pre-order page for 3rd edition --- html/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/html/index.html b/html/index.html index 4993bed06..b617abb33 100644 --- a/html/index.html +++ b/html/index.html @@ -25,8 +25,8 @@

Eloquent JavaScript
3rd edition

This is a book about JavaScript, programming, and the wonders of the digital. You can read it online here, or get your own paperback - copy of the second edition. A paper third edition is - being worked on, but it isn't clear yet when it'll be available.

+ copy of the second edition. A paper third edition is expected to be available this October.

+ .

Cover image From c1ad6ae5709d31895e9ea738bc20c31ca6c08d07 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Thu, 17 May 2018 10:21:29 +0200 Subject: [PATCH 114/476] Integrate editing for Chapter 18 --- 09_regexp.md | 6 ++--- 18_http.md | 56 +++++++++++++++++++++++----------------------- 21_skillsharing.md | 2 +- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/09_regexp.md b/09_regexp.md index 408ad0ff8..fdb139cad 100644 --- a/09_regexp.md +++ b/09_regexp.md @@ -836,7 +836,7 @@ When creating the `\b` ((boundary)) markers, we have to use two backslashes because we are writing them in a normal string, not a slash-enclosed regular expression. The second argument to the `RegExp` constructor contains the options for the regular expression—in this -case, `"gi"` for global and case-insensitive. +case, `"gi"` for global and case insensitive. But what if the name is `"dea+hl[]rd"` because our user is a ((nerd))y teenager? That would result in a nonsensical regular expression that @@ -1223,7 +1223,7 @@ starting position of the match. Their `replace` method can replace matches of a pattern with a replacement string or function. Regular expressions can have options, which are written after the -closing slash. The `i` option makes the match case-insensitive. The +closing slash. The `i` option makes the match case insensitive. The `g` option makes the expression _global_, which, among other things, causes the `replace` method to replace all instances instead of just the first. The `y` option makes it sticky, which means that it will @@ -1421,7 +1421,7 @@ digits _or_ a dot followed by one or more digits. {{index exponent, "case sensitivity", ["regular expression", flags]}} -Finally, to make the _e_ case-insensitive, either add an `i` option to +Finally, to make the _e_ case insensitive, either add an `i` option to the regular expression or use `[eE]`. hint}} diff --git a/18_http.md b/18_http.md index 231ef2972..e589a351c 100644 --- a/18_http.md +++ b/18_http.md @@ -74,7 +74,7 @@ it to `DELETE` its main page, it'll probably refuse. {{index [path, URL], GitHub}} -The part after the ((method)) name is the path of the ((resource)) the +The part after the ((method)) name is the path of the _((resource))_ the request applies to. In the simplest case, a resource is simply a ((file)) on the ((server)), but the protocol doesn't require it to be. A resource may be anything that can be transferred _as if_ it is a @@ -89,7 +89,7 @@ After the resource path, the first line of the request mentions is using. In practice, many sites use HTTP version 2, which supports the same -concepts as version 1.1, but is a lot more complicated so that it can +concepts as version 1.1 but is a lot more complicated so that it can be faster. Browsers will automatically switch to the appropriate protocol version when talking to a given server, and the outcome of a request is the same regardless which version is used. Because version @@ -230,7 +230,7 @@ console.log(decodeURIComponent("Yes%3F")); If we change the `method` attribute of the HTML form in the example we saw earlier to `POST`, the ((HTTP)) request made to submit the ((form)) will use the `POST` method and put the ((query string)) in -body of the request, rather than adding it to the URL. +the body of the request, rather than adding it to the URL. ```{lang: http} POST /example/message.html HTTP/1.1 @@ -275,21 +275,21 @@ fetch("example/data.txt").then(response => { Calling `fetch` returns a promise that resolves to a `Response` object holding information about the server's response, such as its status code and its headers. The headers are wrapped in a `Map`-like object -that treats its keys (the header names) as case-insensitive, because +that treats its keys (the header names) as case insensitive, because header names are not supposed to be case sensitive. This means that `headers.get("Content-Type")` and `headers.get("content-TYPE")` will return the same value. Note that the promise returned by `fetch` resolves successfully even if the server responded with an error code. It _might_ also be -rejected, if there is a network error or the ((server)) that the +rejected, if there is a network error or if the ((server)) that the request is addressed to can't be found. {{index [path, URL], "relative URL"}} The first argument to `fetch` is the URL that should be requested. When that ((URL)) doesn't start with a protocol name (such as _http:_) -it is treated as relative, which means that it is interpreted relative +it is treated as _relative_, which means it is interpreted relative to the current document. When it starts with a slash (/), it replaces the current path, which is the part after the server name. When it does not, the part of the current path up to and including its last @@ -317,7 +317,7 @@ rejects if it's not valid JSON. {{index "GET method", "body (HTTP)", "DELETE method", "method property"}} -By default, `fetch` uses the `GET` method to make its request, and +By default, `fetch` uses the `GET` method to make its request and does not include a request body. You can configure it differently by passing an object with extra options as a second argument. For example, this request tries to delete `example/data.txt`. @@ -374,7 +374,7 @@ _mybank.com_). {{index "Access-Control-Allow-Origin header", "cross-domain request"}} -This can be an annoying problem when building systems that wants to +This can be an annoying problem when building systems that want to access several domains for legitimate reasons. Fortunately, ((server))s can include a ((header)) like this in their ((response)) to explicitly indicate to the browser that it is okay for the request @@ -430,7 +430,7 @@ server interface around. Data traveling over the Internet tends to follow a long, dangerous road. To get to its destination, it must hop through anything from -coffee-shop Wi-Fi to ((network))s controlled by various companies and +coffee-shop Wi-Fi hotspots to ((network))s controlled by various companies and states. At any point along its route it may be inspected or even modified. @@ -445,16 +445,16 @@ to via your bank's website, plain HTTP is not good enough. {{indexsee "Secure HTTP", HTTPS}} -The secure ((HTTP)) protocol, whose ((URL))s start with _https://_, +The secure ((HTTP)) protocol, used for ((URL))s start with _https://_, wraps HTTP traffic in a way that makes it harder to read and tamper with. Before exchanging data, the client verifies that the server is -who it claims to be, by asking it to prove that it has a cryptographic +who it claims to be by asking it to prove that it has a cryptographic ((certificate)) issued by a certificate authority that the ((browser)) recognizes. Next, all data going over the ((connection)) is encrypted in a way that should prevent eavesdropping and tampering. -Thus, when it works right, ((HTTPS)) prevents both the someone -impersonating the website you were trying to talk to and the someone +Thus, when it works right, ((HTTPS)) prevents other people from +impersonating the website you are trying to talk to and from snooping on your communication. It is not perfect, and there have been various incidents where HTTPS failed because of forged or stolen certificates and broken software, but it is a _lot_ safer than plain @@ -564,7 +564,7 @@ predefined options. Such a field looks like this: -{{figure {url: "img/form_select.png", alt: "A select field",width: "4cm"}}} +{{figure {url: "img/form_select.png", alt: "A select field", width: "4cm"}}} if}} @@ -636,7 +636,7 @@ the OK button, rather than going through the help link first: {{index "tabindex attribute"}} By default, most types of HTML elements cannot be focused. But you can -add a `tabindex` attribute to any element, which will make it +add a `tabindex` attribute to any element that will make it focusable. A `tabindex` of -1 makes tabbing skip over an element, even if it is normally focusable. @@ -665,8 +665,8 @@ if}} {{index "user experience", "asynchronous programming"}} When a program is -in the process of handling an action caused by some ((button)) or other control, -which might require communication with the server and thus take a +in the process of handling an action caused by some ((button)) or other control +that might require communication with the server and thus take a while, it can be a good idea to disable the control until the action finishes. That way, when the user gets impatient and clicks it again, they don't accidentally repeat @@ -1104,7 +1104,7 @@ prevents the feature from eating up too much space. {{index "localStorage object", "note-taking example", "select (HTML tag)", "button (HTML tag)", "textarea (HTML tag)"}} The following code implements a crude note-taking application. It -keeps a set of named notes, and allows the user to edit notes and +keeps a set of named notes and allows the user to edit notes and create new ones. ```{lang: "text/html", startCode: true} @@ -1165,7 +1165,7 @@ exist from `localStorage` will yield `null`. Passing `null` to Thus, the `||` operator can be used to provide a default value in a situation like this. -The `setState` method makes sure the DOM is showing a given state, and +The `setState` method makes sure the DOM is showing a given state and stores the new state to `localStorage`. Event handlers call this function to move to a new state. @@ -1173,11 +1173,11 @@ function to move to a new state. The use of `Object.assign` in the example is intended to create a new object that is a clone of the old `state.notes`, but with one property -added or overwritten. `Object.assign` takes its first argument, and +added or overwritten. `Object.assign` takes its first argument and adds all properties from any further arguments to it. Thus, giving it an empty object will cause it to fill a fresh object. The ((square brackets)) notation in the third argument is used to create a property -whose names is based on some dynamic value. +whose name is based on some dynamic value. {{index "sessionStorage object"}} @@ -1229,7 +1229,7 @@ file picker field, the `FileReader` interface can be used to access the content of this file from a JavaScript program. The `localStorage` and `sessionStorage` objects can be used to save -information in a way that survives page reloads. The first saves the +information in a way that survives page reloads. The first object saves the data forever (or until the user decides to clear it), and the second saves it until the browser is closed. @@ -1239,7 +1239,7 @@ saves it until the browser is closed. {{index "Accept header", "media type", "document format", "content negotiation (exercise)"}} -One of the things that HTTP can do is called _content negotiation_. +One of the things HTTP can do is called _content negotiation_. The `Accept` request header is used to tell the server what type of document the client would like to get. Many servers ignore this header, but when a server knows of various ways to encode a resource, @@ -1295,7 +1295,7 @@ JavaScript code. {{index "textarea (HTML tag)", "button (HTML tag)", "Function constructor", "error message"}} -Put a button next to a ` @@ -884,17 +620,11 @@ delay), the timeout from the previous event will be canceled. {{index "sloppy programming"}} -Giving an undefined value to `clearTimeout` or calling it on a timeout -that has already fired has no effect. Thus, we don't have to be -careful about when to call it, and we simply do so for every event. +Giving an undefined value to `clearTimeout` or calling it on a timeout that has already fired has no effect. Thus, we don't have to be careful about when to call it, and we simply do so for every event. {{index "mousemove event"}} -We can use a slightly different pattern if we want to space responses -so that they're separated by at least a certain length of ((time)) but -want to fire them _during_ a series of events, not just afterward. For -example, we might want to respond to `"mousemove"` events by showing -the current coordinates of the mouse but only every 250 milliseconds. +We can use a slightly different pattern if we want to space responses so that they're separated by at least a certain length of ((time)) but want to fire them _during_ a series of events, not just afterward. For example, we might want to respond to `"mousemove"` events by showing the current coordinates of the mouse but only every 250 milliseconds. ```{lang: "text/html"} ``` -After creating the context object, the example draws a red -((rectangle)) 100 ((pixel))s wide and 50 pixels high, with its top-left -corner at coordinates (10,10). +After creating the context object, the example draws a red ((rectangle)) 100 ((pixel))s wide and 50 pixels high, with its top-left corner at coordinates (10,10). {{if book @@ -153,10 +104,7 @@ if}} {{index SVG, coordinates}} -Just like in HTML (and SVG), the coordinate system that the canvas -uses puts (0,0) at the top-left corner, and the positive y-((axis)) -goes down from there. So (10,10) is 10 pixels below and to the right -of the top-left corner. +Just like in HTML (and SVG), the coordinate system that the canvas uses puts (0,0) at the top-left corner, and the positive y-((axis)) goes down from there. So (10,10) is 10 pixels below and to the right of the top-left corner. {{id fill_stroke}} @@ -164,36 +112,23 @@ of the top-left corner. {{index filling, stroking, drawing, SVG}} -In the ((canvas)) interface, a shape can be _filled_, meaning its area -is given a certain color or pattern, or it can be _stroked_, which -means a ((line)) is drawn along its edge. The same terminology is used -by SVG. +In the ((canvas)) interface, a shape can be _filled_, meaning its area is given a certain color or pattern, or it can be _stroked_, which means a ((line)) is drawn along its edge. The same terminology is used by SVG. {{index "fillRect method", "strokeRect method"}} -The `fillRect` method fills a ((rectangle)). It takes first the x- and -y-((coordinates)) of the rectangle's top-left corner, then its width, -and then its height. A similar method, `strokeRect`, draws the -((outline)) of a rectangle. +The `fillRect` method fills a ((rectangle)). It takes first the x- and y-((coordinates)) of the rectangle's top-left corner, then its width, and then its height. A similar method, `strokeRect`, draws the ((outline)) of a rectangle. {{index [state, "of canvas"]}} -Neither method takes any further parameters. The color of the fill, -thickness of the stroke, and so on, are not determined by an argument -to the method (as you might reasonably expect) but rather by -properties of the context object. +Neither method takes any further parameters. The color of the fill, thickness of the stroke, and so on, are not determined by an argument to the method (as you might reasonably expect) but rather by properties of the context object. {{index filling, "fillStyle property"}} -The `fillStyle` property controls the way shapes are filled. It can be -set to a string that specifies a ((color)), using the color notation -used by ((CSS)). +The `fillStyle` property controls the way shapes are filled. It can be set to a string that specifies a ((color)), using the color notation used by ((CSS)). {{index stroking, "line width", "strokeStyle property", "lineWidth property", canvas}} -The `strokeStyle` property works similarly but determines the color -used for a stroked line. The width of that line is determined by the -`lineWidth` property, which may contain any positive number. +The `strokeStyle` property works similarly but determines the color used for a stroked line. The width of that line is determined by the `lineWidth` property, which may contain any positive number. ```{lang: "text/html"} @@ -208,8 +143,7 @@ used for a stroked line. The width of that line is determined by the {{if book -This code draws two blue squares, using a thicker line for the second -one. +This code draws two blue squares, using a thicker line for the second one. {{figure {url: "img/canvas_stroke.png", alt: "Two stroked squares",width: "5cm"}}} @@ -217,19 +151,13 @@ if}} {{index "default value", [canvas, size]}} -When no `width` or `height` attribute is specified, as in the example, -a canvas element gets a default width of 300 pixels and height of 150 -pixels. +When no `width` or `height` attribute is specified, as in the example, a canvas element gets a default width of 300 pixels and height of 150 pixels. ## Paths {{index [path, canvas], [interface, design], [canvas, path]}} -A path is a sequence of ((line))s. The 2D canvas interface takes a -peculiar approach to describing such a path. It is done entirely -through ((side effect))s. Paths are not values that can be stored and -passed around. Instead, if you want to do something with a path, you -make a sequence of method calls to describe its shape. +A path is a sequence of ((line))s. The 2D canvas interface takes a peculiar approach to describing such a path. It is done entirely through ((side effect))s. Paths are not values that can be stored and passed around. Instead, if you want to do something with a path, you make a sequence of method calls to describe its shape. ```{lang: "text/html"} @@ -246,12 +174,7 @@ make a sequence of method calls to describe its shape. {{index canvas, "stroke method", "lineTo method", "moveTo method", shape}} -This example creates a path with a number of horizontal ((line)) -segments and then strokes it using the `stroke` method. Each segment -created with `lineTo` starts at the path's _current_ position. That -position is usually the end of the last segment, unless `moveTo` was -called. In that case, the next segment would start at the position -passed to `moveTo`. +This example creates a path with a number of horizontal ((line)) segments and then strokes it using the `stroke` method. Each segment created with `lineTo` starts at the path's _current_ position. That position is usually the end of the last segment, unless `moveTo` was called. In that case, the next segment would start at the position passed to `moveTo`. {{if book @@ -263,12 +186,7 @@ if}} {{index [path, canvas], filling, [path, closing], "fill method"}} -When filling a path (using the `fill` method), each ((shape)) is -filled separately. A path can contain multiple shapes—each `moveTo` -motion starts a new one. But the path needs to be _closed_ (meaning -its start and end are in the same position) before it can be filled. -If the path is not already closed, a line is added from its end to its -start, and the shape enclosed by the completed path is filled. +When filling a path (using the `fill` method), each ((shape)) is filled separately. A path can contain multiple shapes—each `moveTo` motion starts a new one. But the path needs to be _closed_ (meaning its start and end are in the same position) before it can be filled. If the path is not already closed, a line is added from its end to its start, and the shape enclosed by the completed path is filled. ```{lang: "text/html"} @@ -282,10 +200,7 @@ start, and the shape enclosed by the completed path is filled. ``` -This example draws a filled triangle. Note that only two of the -triangle's sides are explicitly drawn. The third, from the -bottom-right corner back to the top, is implied and wouldn't be there -when you stroke the path. +This example draws a filled triangle. Note that only two of the triangle's sides are explicitly drawn. The third, from the bottom-right corner back to the top, is implied and wouldn't be there when you stroke the path. {{if book @@ -295,26 +210,17 @@ if}} {{index "stroke method", "closePath method", [path, closing], canvas}} -You could also use the `closePath` method to explicitly close a path -by adding an actual ((line)) segment back to the path's start. This -segment _is_ drawn when stroking the path. +You could also use the `closePath` method to explicitly close a path by adding an actual ((line)) segment back to the path's start. This segment _is_ drawn when stroking the path. ## Curves {{index [path, canvas], canvas, drawing}} -A path may also contain ((curve))d ((line))s. These are unfortunately -a bit more involved to draw. +A path may also contain ((curve))d ((line))s. These are unfortunately a bit more involved to draw. {{index "quadraticCurveTo method"}} -The `quadraticCurveTo` method draws a curve to a given point. To -determine the curvature of the line, the method is given a ((control -point)) as well as a destination point. Imagine this control point as -_attracting_ the line, giving it its curve. The line won't go through -the control point, but its direction at the start and end points will -be such that a straight line in that direction would point toward the -control point. The following example illustrates this: +The `quadraticCurveTo` method draws a curve to a given point. To determine the curvature of the line, the method is given a ((control point)) as well as a destination point. Imagine this control point as _attracting_ the line, giving it its curve. The line won't go through the control point, but its direction at the start and end points will be such that a straight line in that direction would point toward the control point. The following example illustrates this: ```{lang: "text/html"} @@ -340,20 +246,11 @@ if}} {{index "stroke method"}} -We draw a ((quadratic curve)) from the left to the right, with (60,10) -as control point, and then draw two ((line)) segments going through -that control point and back to the start of the line. The result -somewhat resembles a _((Star Trek))_ insignia. You can see the effect -of the control point: the lines leaving the lower corners start off in -the direction of the control point and then ((curve)) toward their -target. +We draw a ((quadratic curve)) from the left to the right, with (60,10) as control point, and then draw two ((line)) segments going through that control point and back to the start of the line. The result somewhat resembles a _((Star Trek))_ insignia. You can see the effect of the control point: the lines leaving the lower corners start off in the direction of the control point and then ((curve)) toward their target. {{index canvas, "bezierCurveTo method"}} -The `bezierCurveTo` method draws a similar kind of curve. Instead of a -single ((control point)), this one has two—one for each of the -((line))'s endpoints. Here is a similar sketch to illustrate the -behavior of such a curve: +The `bezierCurveTo` method draws a similar kind of curve. Instead of a single ((control point)), this one has two—one for each of the ((line))'s endpoints. Here is a similar sketch to illustrate the behavior of such a curve: ```{lang: "text/html"} @@ -370,9 +267,7 @@ behavior of such a curve: ``` -The two control points specify the direction at both ends of the -curve. The farther they are away from their corresponding point, the -more the curve will "bulge" in that direction. +The two control points specify the direction at both ends of the curve. The farther they are away from their corresponding point, the more the curve will "bulge" in that direction. {{if book @@ -382,26 +277,15 @@ if}} {{index "trial and error"}} -Such ((curve))s can be hard to work with—it's not always clear how to -find the ((control point))s that provide the ((shape)) you are looking -for. Sometimes you can compute them, and sometimes you'll just have to -find a suitable value by trial and error. +Such ((curve))s can be hard to work with—it's not always clear how to find the ((control point))s that provide the ((shape)) you are looking for. Sometimes you can compute them, and sometimes you'll just have to find a suitable value by trial and error. {{index "arc method", arc}} -The `arc` method is a way to draw a line that curves along the edge of -a circle. It takes a pair of ((coordinates)) for the arc's center, a -radius, and then a start angle and end angle. +The `arc` method is a way to draw a line that curves along the edge of a circle. It takes a pair of ((coordinates)) for the arc's center, a radius, and then a start angle and end angle. {{index pi, "Math.PI constant"}} -Those last two parameters make it possible to draw only part of the -circle. The ((angle))s are measured in ((radian))s, not ((degree))s. -This means a full ((circle)) has an angle of 2π, or `2 * Math.PI`, -which is about 6.28. The angle starts counting at the point to the -right of the circle's center and goes clockwise from there. You can -use a start of 0 and an end bigger than 2π (say, 7) to draw a full -circle. +Those last two parameters make it possible to draw only part of the circle. The ((angle))s are measured in ((radian))s, not ((degree))s. This means a full ((circle)) has an angle of 2π, or `2 * Math.PI`, which is about 6.28. The angle starts counting at the point to the right of the circle's center and goes clockwise from there. You can use a start of 0 and an end bigger than 2π (say, 7) to draw a full circle. ```{lang: "text/html"} @@ -418,11 +302,7 @@ circle. {{index "moveTo method", "arc method", [path, " canvas"]}} -The resulting picture contains a ((line)) from the right of the full -circle (first call to `arc`) to the right of the quarter-((circle)) -(second call). Like other path-drawing methods, a line drawn with -`arc` is connected to the previous path segment. You can call `moveTo` -or start a new path to avoid this. +The resulting picture contains a ((line)) from the right of the full circle (first call to `arc`) to the right of the quarter-((circle)) (second call). Like other path-drawing methods, a line drawn with `arc` is connected to the previous path segment. You can call `moveTo` or start a new path to avoid this. {{if book @@ -436,12 +316,9 @@ if}} {{index "pie chart example"}} -Imagine you've just taken a ((job)) at EconomiCorp, Inc., and your -first assignment is to draw a pie chart of its customer satisfaction -((survey)) results. +Imagine you've just taken a ((job)) at EconomiCorp, Inc., and your first assignment is to draw a pie chart of its customer satisfaction ((survey)) results. -The `results` binding contains an array of objects that represent the -survey responses. +The `results` binding contains an array of objects that represent the survey responses. ```{sandbox: "pie", includeCode: true} const results = [ @@ -454,12 +331,7 @@ const results = [ {{index "pie chart example"}} -To draw a pie chart, we draw a number of pie slices, each made up of -an ((arc)) and a pair of ((line))s to the center of that arc. We can -compute the ((angle)) taken up by each arc by dividing a full circle -(2π) by the total number of responses and then multiplying that number -(the angle per response) by the number of people who picked a given -choice. +To draw a pie chart, we draw a number of pie slices, each made up of an ((arc)) and a pair of ((line))s to the center of that arc. We can compute the ((angle)) taken up by each arc by dividing a full circle (2π) by the total number of responses and then multiplying that number (the angle per response) by the number of people who picked a given choice. ```{lang: "text/html", sandbox: "pie"} @@ -492,17 +364,13 @@ This draws the following chart: if}} -But a chart that doesn't tell us what the slices mean isn't very -helpful. We need a way to draw text to the ((canvas)). +But a chart that doesn't tell us what the slices mean isn't very helpful. We need a way to draw text to the ((canvas)). ## Text {{index stroking, filling, "fillStyle property", "fillText method", "strokeText method"}} -A 2D canvas drawing context provides the methods `fillText` and -`strokeText`. The latter can be useful for outlining letters, but -usually `fillText` is what you need. It will fill the outline of the -given ((text)) with the current `fillStyle`. +A 2D canvas drawing context provides the methods `fillText` and `strokeText`. The latter can be useful for outlining letters, but usually `fillText` is what you need. It will fill the outline of the given ((text)) with the current `fillStyle`. ```{lang: "text/html"} @@ -514,48 +382,25 @@ given ((text)) with the current `fillStyle`. ``` -You can specify the size, style, and ((font)) of the text with the -`font` property. This example just gives a font size and family name. -It is also possible to add `italic` or `bold` to the start of the -string to select a style. +You can specify the size, style, and ((font)) of the text with the `font` property. This example just gives a font size and family name. It is also possible to add `italic` or `bold` to the start of the string to select a style. {{index "fillText method", "strokeText method", "textAlign property", "textBaseline property"}} -The last two arguments to `fillText` and `strokeText` provide the -position at which the font is drawn. By default, they indicate the -position of the start of the text's alphabetic baseline, which is the -line that letters "stand" on, not counting hanging parts in letters -such as _j_ or _p_. You can change the horizontal position by setting the -`textAlign` property to `"end"` or `"center"` and the vertical -position by setting `textBaseline` to `"top"`, `"middle"`, or -`"bottom"`. +The last two arguments to `fillText` and `strokeText` provide the position at which the font is drawn. By default, they indicate the position of the start of the text's alphabetic baseline, which is the line that letters "stand" on, not counting hanging parts in letters such as _j_ or _p_. You can change the horizontal position by setting the `textAlign` property to `"end"` or `"center"` and the vertical position by setting `textBaseline` to `"top"`, `"middle"`, or `"bottom"`. {{index "pie chart example"}} -We'll come back to our pie chart, and the problem of ((label))ing the -slices, in the [exercises](canvas#exercise_pie_chart) at the end of -the chapter. +We'll come back to our pie chart, and the problem of ((label))ing the slices, in the [exercises](canvas#exercise_pie_chart) at the end of the chapter. ## Images {{index "vector graphics", "bitmap graphics"}} -In computer ((graphics)), a distinction is often made between _vector_ -graphics and _bitmap_ graphics. The first is what we have been doing -so far in this chapter—specifying a picture by giving a logical -description of ((shape))s. Bitmap graphics, on the other hand, don't -specify actual shapes but rather work with ((pixel)) data (rasters of -colored dots). +In computer ((graphics)), a distinction is often made between _vector_ graphics and _bitmap_ graphics. The first is what we have been doing so far in this chapter—specifying a picture by giving a logical description of ((shape))s. Bitmap graphics, on the other hand, don't specify actual shapes but rather work with ((pixel)) data (rasters of colored dots). {{index "load event", "event handling", "img (HTML tag)", "drawImage method"}} -The `drawImage` method allows us to draw ((pixel)) data onto a -((canvas)). This pixel data can originate from an `` element or -from another canvas. The following example creates a detached `` -element and loads an image file into it. But it cannot immediately -start drawing from this picture because the browser may not have -loaded it yet. To deal with this, we register a `"load"` event handler -and do the drawing after the image has loaded. +The `drawImage` method allows us to draw ((pixel)) data onto a ((canvas)). This pixel data can originate from an `` element or from another canvas. The following example creates a detached `` element and loads an image file into it. But it cannot immediately start drawing from this picture because the browser may not have loaded it yet. To deal with this, we register a `"load"` event handler and do the drawing after the image has loaded. ```{lang: "text/html"} @@ -573,42 +418,27 @@ and do the drawing after the image has loaded. {{index "drawImage method", scaling}} -By default, `drawImage` will draw the image at its original size. You -can also give it two additional arguments to set a different width -and height. +By default, `drawImage` will draw the image at its original size. You can also give it two additional arguments to set a different width and height. -When `drawImage` is given _nine_ arguments, it can be used to draw -only a fragment of an image. The second through fifth arguments -indicate the rectangle (x, y, width, and height) in the source image -that should be copied, and the sixth to ninth arguments give the -rectangle (on the canvas) into which it should be copied. +When `drawImage` is given _nine_ arguments, it can be used to draw only a fragment of an image. The second through fifth arguments indicate the rectangle (x, y, width, and height) in the source image that should be copied, and the sixth to ninth arguments give the rectangle (on the canvas) into which it should be copied. {{index "player", "pixel art"}} -This can be used to pack multiple _((sprite))s_ (image elements) into -a single image file and then draw only the part you need. For example, -we have this picture containing a game character in multiple -((pose))s: +This can be used to pack multiple _((sprite))s_ (image elements) into a single image file and then draw only the part you need. For example, we have this picture containing a game character in multiple ((pose))s: {{figure {url: "img/player_big.png", alt: "Various poses of a game character",width: "6cm"}}} {{index [animation, "platform game"]}} -By alternating which pose we draw, we can show an animation that -looks like a walking character. +By alternating which pose we draw, we can show an animation that looks like a walking character. {{index "fillRect method", "clearRect method", clearing}} -To animate a ((picture)) on a ((canvas)), the `clearRect` method is -useful. It resembles `fillRect`, but instead of coloring the -rectangle, it makes it ((transparent)), removing the previously drawn -pixels. +To animate a ((picture)) on a ((canvas)), the `clearRect` method is useful. It resembles `fillRect`, but instead of coloring the rectangle, it makes it ((transparent)), removing the previously drawn pixels. {{index "setInterval function", "img (HTML tag)"}} -We know that each _((sprite))_, each subpicture, is 24 ((pixel))s wide -and 30 pixels high. The following code loads the image and then sets -up an interval (repeated timer) to draw the next ((frame)): +We know that each _((sprite))_, each subpicture, is 24 ((pixel))s wide and 30 pixels high. The following code loads the image and then sets up an interval (repeated timer) to draw the next ((frame)): ```{lang: "text/html"} @@ -634,11 +464,7 @@ up an interval (repeated timer) to draw the next ((frame)): {{index "remainder operator", "% operator", [animation, "platform game"]}} -The `cycle` binding tracks our position in the animation. For each -((frame)), it is incremented and then clipped back to the 0 to 7 range -by using the remainder operator. This binding is then used to compute -the x-coordinate that the sprite for the current pose has in the -picture. +The `cycle` binding tracks our position in the animation. For each ((frame)), it is incremented and then clipped back to the 0 to 7 range by using the remainder operator. This binding is then used to compute the x-coordinate that the sprite for the current pose has in the picture. ## Transformation @@ -646,15 +472,11 @@ picture. {{indexsee flipping, mirroring}} -But what if we want our character to walk to the left instead of to -the right? We could draw another set of sprites, of course. But we can -also instruct the ((canvas)) to draw the picture the other way round. +But what if we want our character to walk to the left instead of to the right? We could draw another set of sprites, of course. But we can also instruct the ((canvas)) to draw the picture the other way round. {{index "scale method", scaling}} -Calling the `scale` method will cause anything drawn after it to be -scaled. This method takes two parameters, one to set a horizontal -scale and one to set a vertical scale. +Calling the `scale` method will cause anything drawn after it to be scaled. This method takes two parameters, one to set a horizontal scale and one to set a vertical scale. ```{lang: "text/html"} @@ -670,8 +492,7 @@ scale and one to set a vertical scale. {{if book -Because of the call to `scale`, the circle is drawn three times as wide -and half as high. +Because of the call to `scale`, the circle is drawn three times as wide and half as high. {{figure {url: "img/canvas_scale.png", alt: "A scaled circle",width: "6.6cm"}}} @@ -679,54 +500,29 @@ if}} {{index mirroring}} -Scaling will cause everything about the drawn image, including the -((line width)), to be stretched out or squeezed together as specified. -Scaling by a negative amount will flip the picture around. The -flipping happens around point (0,0), which means it will also flip the -direction of the coordinate system. When a horizontal scaling of -1 is -applied, a shape drawn at x position 100 will end up at what used to -be position -100. +Scaling will cause everything about the drawn image, including the ((line width)), to be stretched out or squeezed together as specified. Scaling by a negative amount will flip the picture around. The flipping happens around point (0,0), which means it will also flip the direction of the coordinate system. When a horizontal scaling of -1 is applied, a shape drawn at x position 100 will end up at what used to be position -100. {{index "drawImage method"}} -So to turn a picture around, we can't simply add `cx.scale(-1, 1)` -before the call to `drawImage` because that would move our picture -outside of the ((canvas)), where it won't be visible. You could adjust -the ((coordinates)) given to `drawImage` to compensate for this by -drawing the image at x position -50 instead of 0. Another solution, -which doesn't require the code that does the drawing to know about the -scale change, is to adjust the ((axis)) around which the scaling -happens. +So to turn a picture around, we can't simply add `cx.scale(-1, 1)` before the call to `drawImage` because that would move our picture outside of the ((canvas)), where it won't be visible. You could adjust the ((coordinates)) given to `drawImage` to compensate for this by drawing the image at x position -50 instead of 0. Another solution, which doesn't require the code that does the drawing to know about the scale change, is to adjust the ((axis)) around which the scaling happens. {{index "rotate method", "translate method", transformation}} -There are several other methods besides `scale` that influence the -coordinate system for a ((canvas)). You can rotate subsequently drawn -shapes with the `rotate` method and move them with the `translate` -method. The interesting—and confusing—thing is that these -transformations _stack_, meaning that each one happens relative to the -previous transformations. +There are several other methods besides `scale` that influence the coordinate system for a ((canvas)). You can rotate subsequently drawn shapes with the `rotate` method and move them with the `translate` method. The interesting—and confusing—thing is that these transformations _stack_, meaning that each one happens relative to the previous transformations. {{index "rotate method", "translate method"}} -So if we translate by 10 horizontal pixels twice, everything will be -drawn 20 pixels to the right. If we first move the center of the -coordinate system to (50,50) and then rotate by 20 ((degree))s (about -0.1π ((radian))s), that rotation will happen _around_ point (50,50). +So if we translate by 10 horizontal pixels twice, everything will be drawn 20 pixels to the right. If we first move the center of the coordinate system to (50,50) and then rotate by 20 ((degree))s (about 0.1π ((radian))s), that rotation will happen _around_ point (50,50). {{figure {url: "img/transform.svg", alt: "Stacking transformations",width: "9cm"}}} {{index coordinates}} -But if we _first_ rotate by 20 degrees and _then_ translate by -(50,50), the translation will happen in the rotated coordinate system -and thus produce a different orientation. The order in which -transformations are applied matters. +But if we _first_ rotate by 20 degrees and _then_ translate by (50,50), the translation will happen in the rotated coordinate system and thus produce a different orientation. The order in which transformations are applied matters. {{index axis, mirroring}} -To flip a picture around the vertical line at a given x position, we -can do the following: +To flip a picture around the vertical line at a given x position, we can do the following: ```{includeCode: true} function flipHorizontally(context, around) { @@ -738,26 +534,15 @@ function flipHorizontally(context, around) { {{index "flipHorizontally method"}} -We move the y-((axis)) to where we want our ((mirror)) to be, apply -the mirroring, and finally move the y-axis back to its proper place in -the mirrored universe. The following picture explains why this works: +We move the y-((axis)) to where we want our ((mirror)) to be, apply the mirroring, and finally move the y-axis back to its proper place in the mirrored universe. The following picture explains why this works: {{figure {url: "img/mirror.svg", alt: "Mirroring around a vertical line",width: "8cm"}}} {{index "translate method", "scale method", transformation, canvas}} -This shows the coordinate systems before and after mirroring across -the central line. The triangles are numbered to illustrate each step. -If we draw a triangle at a positive x position, it would, by default, -be in the place where triangle 1 is. A call to `flipHorizontally` -first does a translation to the right, which gets us to triangle 2. It -then scales, flipping the triangle over to position 3. This is not -where it should be, if it were mirrored in the given line. The second -`translate` call fixes this—it "cancels" the initial translation and -makes triangle 4 appear exactly where it should. +This shows the coordinate systems before and after mirroring across the central line. The triangles are numbered to illustrate each step. If we draw a triangle at a positive x position, it would, by default, be in the place where triangle 1 is. A call to `flipHorizontally` first does a translation to the right, which gets us to triangle 2. It then scales, flipping the triangle over to position 3. This is not where it should be, if it were mirrored in the given line. The second `translate` call fixes this—it "cancels" the initial translation and makes triangle 4 appear exactly where it should. -We can now draw a mirrored character at position (100,0) by flipping -the world around the character's vertical center. +We can now draw a mirrored character at position (100,0) by flipping the world around the character's vertical center. ```{lang: "text/html"} @@ -778,41 +563,19 @@ the world around the character's vertical center. {{index "side effect", canvas, transformation}} -Transformations stick around. Everything else we draw after -((drawing)) that mirrored character would also be mirrored. That might -be inconvenient. +Transformations stick around. Everything else we draw after ((drawing)) that mirrored character would also be mirrored. That might be inconvenient. -It is possible to save the current transformation, do some drawing and -transforming, and then restore the old transformation. This is usually -the proper thing to do for a function that needs to temporarily -transform the coordinate system. First, we save whatever -transformation the code that called the function was using. Then the -function does its thing, adding more transformations on top of the -current transformation. Finally, we revert to the -transformation we started with. +It is possible to save the current transformation, do some drawing and transforming, and then restore the old transformation. This is usually the proper thing to do for a function that needs to temporarily transform the coordinate system. First, we save whatever transformation the code that called the function was using. Then the function does its thing, adding more transformations on top of the current transformation. Finally, we revert to the transformation we started with. {{index "save method", "restore method", [state, "of canvas"]}} -The `save` and `restore` methods on the 2D ((canvas)) context do this -((transformation)) management. They conceptually keep a stack of -transformation states. When you call `save`, the current state is -pushed onto the stack, and when you call `restore`, the state on top -of the stack is taken off and used as the context's current -transformation. You can also call `resetTransform` to fully reset the -transformation. +The `save` and `restore` methods on the 2D ((canvas)) context do this ((transformation)) management. They conceptually keep a stack of transformation states. When you call `save`, the current state is pushed onto the stack, and when you call `restore`, the state on top of the stack is taken off and used as the context's current transformation. You can also call `resetTransform` to fully reset the transformation. {{index "branching recursion", "fractal example", recursion}} -The `branch` function in the following example illustrates what you -can do with a function that changes the transformation and then calls -a function (in this case itself), which continues drawing with -the given transformation. +The `branch` function in the following example illustrates what you can do with a function that changes the transformation and then calls a function (in this case itself), which continues drawing with the given transformation. -This function draws a treelike shape by drawing a line, moving the -center of the coordinate system to the end of the line, and calling -itself twice—first rotated to the left and then rotated to the right. -Every call reduces the length of the branch drawn, and the recursion -stops when the length drops below 8. +This function draws a treelike shape by drawing a line, moving the center of the coordinate system to the end of the line, and calling itself twice—first rotated to the left and then rotated to the right. Every call reduces the length of the branch drawn, and the recursion stops when the length drops below 8. ```{lang: "text/html"} @@ -844,12 +607,7 @@ if}} {{index "save method", "restore method", canvas, "rotate method"}} -If the calls to `save` and `restore` were not there, the second -recursive call to `branch` would end up with the position and rotation -created by the first call. It wouldn't be connected to the current -branch but rather to the innermost, rightmost branch drawn by the -first call. The resulting shape might also be interesting, but it is -definitely not a tree. +If the calls to `save` and `restore` were not there, the second recursive call to `branch` would end up with the position and rotation created by the first call. It wouldn't be connected to the current branch but rather to the innermost, rightmost branch drawn by the first call. The resulting shape might also be interesting, but it is definitely not a tree. {{id canvasdisplay}} @@ -857,26 +615,15 @@ definitely not a tree. {{index "drawImage method"}} -We now know enough about ((canvas)) drawing to start working on a -((canvas))-based ((display)) system for the ((game)) from the -[previous chapter](game). The new display will no longer be showing -just colored boxes. Instead, we'll use `drawImage` to draw pictures -that represent the game's elements. +We now know enough about ((canvas)) drawing to start working on a ((canvas))-based ((display)) system for the ((game)) from the [previous chapter](game). The new display will no longer be showing just colored boxes. Instead, we'll use `drawImage` to draw pictures that represent the game's elements. {{index "CanvasDisplay class", "DOMDisplay class", [interface, object]}} -We define another display object type called `CanvasDisplay`, -supporting the same interface as `DOMDisplay` from [Chapter -?](game#domdisplay), namely, the methods `syncState` and `clear`. +We define another display object type called `CanvasDisplay`, supporting the same interface as `DOMDisplay` from [Chapter ?](game#domdisplay), namely, the methods `syncState` and `clear`. {{index [state, "in objects"]}} -This object keeps a little more information than `DOMDisplay`. Rather -than using the scroll position of its DOM element, it tracks its own -((viewport)), which tells us what part of the level we are currently -looking at. Finally, it keeps a `flipPlayer` property so that even -when the player is standing still, it keeps facing the direction it -last moved in. +This object keeps a little more information than `DOMDisplay`. Rather than using the scroll position of its DOM element, it tracks its own ((viewport)), which tells us what part of the level we are currently looking at. Finally, it keeps a `flipPlayer` property so that even when the player is standing still, it keeps facing the direction it last moved in. ```{sandbox: "game", includeCode: true} class CanvasDisplay { @@ -903,8 +650,7 @@ class CanvasDisplay { } ``` -The `syncState` method first computes a new viewport and then draws -the game scene at the appropriate position. +The `syncState` method first computes a new viewport and then draws the game scene at the appropriate position. ```{sandbox: "game", includeCode: true} CanvasDisplay.prototype.syncState = function(state) { @@ -917,19 +663,11 @@ CanvasDisplay.prototype.syncState = function(state) { {{index scrolling, clearing}} -Contrary to `DOMDisplay`, this display style _does_ have to redraw the -background on every update. Because shapes on a canvas are just -((pixel))s, after we draw them there is no good way to move them (or -remove them). The only way to update the canvas display is to clear it -and redraw the scene. We may also have scrolled, which requires the -background to be in a different position. +Contrary to `DOMDisplay`, this display style _does_ have to redraw the background on every update. Because shapes on a canvas are just ((pixel))s, after we draw them there is no good way to move them (or remove them). The only way to update the canvas display is to clear it and redraw the scene. We may also have scrolled, which requires the background to be in a different position. {{index "CanvasDisplay class"}} -The `updateViewport` method is similar to `DOMDisplay`'s -`scrollPlayerIntoView` method. It checks whether the player is too -close to the edge of the screen and moves the ((viewport)) when this -is the case. +The `updateViewport` method is similar to `DOMDisplay`'s `scrollPlayerIntoView` method. It checks whether the player is too close to the edge of the screen and moves the ((viewport)) when this is the case. ```{sandbox: "game", includeCode: true} CanvasDisplay.prototype.updateViewport = function(state) { @@ -954,14 +692,9 @@ CanvasDisplay.prototype.updateViewport = function(state) { {{index boundary, "Math.max function", "Math.min function", clipping}} -The calls to `Math.max` and `Math.min` ensure that the viewport does -not end up showing space outside of the level. `Math.max(x, 0)` makes -sure the resulting number is not less than zero. `Math.min` -similarly guarantees that a value stays below a given bound. +The calls to `Math.max` and `Math.min` ensure that the viewport does not end up showing space outside of the level. `Math.max(x, 0)` makes sure the resulting number is not less than zero. `Math.min` similarly guarantees that a value stays below a given bound. -When ((clearing)) the display, we'll use a slightly different -((color)) depending on whether the game is won (brighter) or lost -(darker). +When ((clearing)) the display, we'll use a slightly different ((color)) depending on whether the game is won (brighter) or lost (darker). ```{sandbox: "game", includeCode: true} CanvasDisplay.prototype.clearDisplay = function(status) { @@ -979,9 +712,7 @@ CanvasDisplay.prototype.clearDisplay = function(status) { {{index "Math.floor function", "Math.ceil function", rounding}} -To draw the background, we run through the tiles that are visible in -the current viewport, using the same trick used in the `touches` -method from the [previous chapter](game#touches). +To draw the background, we run through the tiles that are visible in the current viewport, using the same trick used in the `touches` method from the [previous chapter](game#touches). ```{sandbox: "game", includeCode: true} let otherSprites = document.createElement("img"); @@ -1011,46 +742,25 @@ CanvasDisplay.prototype.drawBackground = function(level) { {{index "drawImage method", sprite, tile}} -Tiles that are not empty are drawn with `drawImage`. The -`otherSprites` image contains the pictures used for elements other -than the player. It contains, from left to right, the wall tile, the -lava tile, and the sprite for a coin. +Tiles that are not empty are drawn with `drawImage`. The `otherSprites` image contains the pictures used for elements other than the player. It contains, from left to right, the wall tile, the lava tile, and the sprite for a coin. {{figure {url: "img/sprites_big.png", alt: "Sprites for our game",width: "1.4cm"}}} {{index scaling}} -Background tiles are 20 by 20 pixels since we will use the same scale -that we used in `DOMDisplay`. Thus, the offset for lava tiles is 20 -(the value of the `scale` binding), and the offset for walls is 0. +Background tiles are 20 by 20 pixels since we will use the same scale that we used in `DOMDisplay`. Thus, the offset for lava tiles is 20 (the value of the `scale` binding), and the offset for walls is 0. {{index drawing, "load event", "drawImage method"}} -We don't bother waiting for the sprite image to load. Calling -`drawImage` with an image that hasn't been loaded yet will simply do -nothing. Thus, we might fail to draw the game properly for the first -few ((frame))s, while the image is still loading, but that is not a -serious problem. Since we keep updating the screen, the correct scene -will appear as soon as the loading finishes. +We don't bother waiting for the sprite image to load. Calling `drawImage` with an image that hasn't been loaded yet will simply do nothing. Thus, we might fail to draw the game properly for the first few ((frame))s, while the image is still loading, but that is not a serious problem. Since we keep updating the screen, the correct scene will appear as soon as the loading finishes. {{index "player", [animation, "platform game"], drawing}} -The ((walking)) character shown earlier will be used to represent the -player. The code that draws it needs to pick the right ((sprite)) and -direction based on the player's current motion. The first eight -sprites contain a walking animation. When the player is moving along a -floor, we cycle through them based on the current time. We want to -switch frames every 60 milliseconds, so the ((time)) is divided by 60 -first. When the player is standing still, we draw the ninth sprite. -During jumps, which are recognized by the fact that the vertical speed -is not zero, we use the tenth, rightmost sprite. +The ((walking)) character shown earlier will be used to represent the player. The code that draws it needs to pick the right ((sprite)) and direction based on the player's current motion. The first eight sprites contain a walking animation. When the player is moving along a floor, we cycle through them based on the current time. We want to switch frames every 60 milliseconds, so the ((time)) is divided by 60 first. When the player is standing still, we draw the ninth sprite. During jumps, which are recognized by the fact that the vertical speed is not zero, we use the tenth, rightmost sprite. {{index "flipHorizontally function", "CanvasDisplay class"}} -Because the ((sprite))s are slightly wider than the player object—24 -instead of 16 pixels to allow some space for feet and arms—the method -has to adjust the x-coordinate and width by a given amount -(`playerXOverlap`). +Because the ((sprite))s are slightly wider than the player object—24 instead of 16 pixels to allow some space for feet and arms—the method has to adjust the x-coordinate and width by a given amount (`playerXOverlap`). ```{sandbox: "game", includeCode: true} let playerSprites = document.createElement("img"); @@ -1083,8 +793,7 @@ CanvasDisplay.prototype.drawPlayer = function(player, x, y, }; ``` -The `drawPlayer` method is called by `drawActors`, which is -responsible for drawing all the actors in the game. +The `drawPlayer` method is called by `drawActors`, which is responsible for drawing all the actors in the game. ```{sandbox: "game", includeCode: true} CanvasDisplay.prototype.drawActors = function(actors) { @@ -1105,17 +814,11 @@ CanvasDisplay.prototype.drawActors = function(actors) { }; ``` -When ((drawing)) something that is not the ((player)), we look at its -type to find the offset of the correct sprite. The ((lava)) tile is -found at offset 20, and the ((coin)) sprite is found at 40 (two times -`scale`). +When ((drawing)) something that is not the ((player)), we look at its type to find the offset of the correct sprite. The ((lava)) tile is found at offset 20, and the ((coin)) sprite is found at 40 (two times `scale`). {{index viewport}} -We have to subtract the viewport's position when computing the actor's -position since (0,0) on our ((canvas)) corresponds to the top left of -the viewport, not the top left of the level. We could also have used -`translate` for this. Either way works. +We have to subtract the viewport's position when computing the actor's position since (0,0) on our ((canvas)) corresponds to the top left of the viewport, not the top left of the level. We could also have used `translate` for this. Either way works. {{if interactive @@ -1135,8 +838,7 @@ if}} {{index [game, screenshot], [game, "with canvas"]}} -That concludes the new ((display)) system. The resulting game looks -something like this: +That concludes the new ((display)) system. The resulting game looks something like this: {{figure {url: "img/canvas_game.png", alt: "The game as shown on canvas",width: "8cm"}}} @@ -1146,105 +848,53 @@ if}} ## Choosing a graphics interface -So when you need to generate graphics in the browser, you can choose -between plain HTML, ((SVG)), and ((canvas)). There is no single -_best_ approach that works in all situations. Each option has -strengths and weaknesses. +So when you need to generate graphics in the browser, you can choose between plain HTML, ((SVG)), and ((canvas)). There is no single _best_ approach that works in all situations. Each option has strengths and weaknesses. {{index "text wrapping"}} -Plain HTML has the advantage of being simple. It also integrates well -with ((text)). Both SVG and canvas allow you to draw text, but they -won't help you position that text or wrap it when it takes up more -than one line. In an HTML-based picture, it is much easier to include -blocks of text. +Plain HTML has the advantage of being simple. It also integrates well with ((text)). Both SVG and canvas allow you to draw text, but they won't help you position that text or wrap it when it takes up more than one line. In an HTML-based picture, it is much easier to include blocks of text. {{index zooming, SVG}} -SVG can be used to produce ((crisp)) ((graphics)) that look good at -any zoom level. Unlike HTML, it is designed for drawing -and is thus more suitable for that purpose. +SVG can be used to produce ((crisp)) ((graphics)) that look good at any zoom level. Unlike HTML, it is designed for drawing and is thus more suitable for that purpose. {{index [DOM, graphics], SVG, "event handling", ["data structure", tree]}} -Both SVG and HTML build up a data structure (the DOM) that -represents your picture. This makes it possible to modify elements -after they are drawn. If you need to repeatedly change a small part of -a big ((picture)) in response to what the user is doing or as part of -an ((animation)), doing it in a canvas can be needlessly expensive. -The DOM also allows us to register mouse event handlers on every -element in the picture (even on shapes drawn with SVG). You can't do -that with canvas. +Both SVG and HTML build up a data structure (the DOM) that represents your picture. This makes it possible to modify elements after they are drawn. If you need to repeatedly change a small part of a big ((picture)) in response to what the user is doing or as part of an ((animation)), doing it in a canvas can be needlessly expensive. The DOM also allows us to register mouse event handlers on every element in the picture (even on shapes drawn with SVG). You can't do that with canvas. {{index performance, optimization}} -But ((canvas))'s ((pixel))-oriented approach can be an advantage when -drawing a huge number of tiny elements. The fact that it does not -build up a data structure but only repeatedly draws onto the same -pixel surface gives canvas a lower cost per shape. +But ((canvas))'s ((pixel))-oriented approach can be an advantage when drawing a huge number of tiny elements. The fact that it does not build up a data structure but only repeatedly draws onto the same pixel surface gives canvas a lower cost per shape. {{index "ray tracer"}} -There are also effects, such as rendering a scene one pixel at a time -(for example, using a ray tracer) or postprocessing an image with -JavaScript (blurring or distorting it), that can be realistically -handled only by a ((pixel))-based approach. +There are also effects, such as rendering a scene one pixel at a time (for example, using a ray tracer) or postprocessing an image with JavaScript (blurring or distorting it), that can be realistically handled only by a ((pixel))-based approach. -In some cases, you may want to combine several of these techniques. -For example, you might draw a ((graph)) with ((SVG)) or ((canvas)) but -show ((text))ual information by positioning an HTML element on top -of the picture. +In some cases, you may want to combine several of these techniques. For example, you might draw a ((graph)) with ((SVG)) or ((canvas)) but show ((text))ual information by positioning an HTML element on top of the picture. {{index display}} -For nondemanding applications, it really doesn't matter much which -interface you choose. The display we built for our game in this -chapter could have been implemented using any of these three -((graphics)) technologies since it does not need to draw text, handle -mouse interaction, or work with an extraordinarily large number of -elements. +For nondemanding applications, it really doesn't matter much which interface you choose. The display we built for our game in this chapter could have been implemented using any of these three ((graphics)) technologies since it does not need to draw text, handle mouse interaction, or work with an extraordinarily large number of elements. ## Summary -In this chapter we discussed techniques for drawing graphics in the -browser, focusing on the `` element. +In this chapter we discussed techniques for drawing graphics in the browser, focusing on the `` element. -A canvas node represents an area in a document that our program may -draw on. This drawing is done through a drawing context object, -created with the `getContext` method. +A canvas node represents an area in a document that our program may draw on. This drawing is done through a drawing context object, created with the `getContext` method. -The 2D drawing interface allows us to fill and stroke various shapes. -The context's `fillStyle` property determines how shapes are filled. -The `strokeStyle` and `lineWidth` properties control the way lines are -drawn. +The 2D drawing interface allows us to fill and stroke various shapes. The context's `fillStyle` property determines how shapes are filled. The `strokeStyle` and `lineWidth` properties control the way lines are drawn. -Rectangles and pieces of text can be drawn with a single method call. -The `fillRect` and `strokeRect` methods draw rectangles, and the -`fillText` and `strokeText` methods draw text. To create custom -shapes, we must first build up a path. +Rectangles and pieces of text can be drawn with a single method call. The `fillRect` and `strokeRect` methods draw rectangles, and the `fillText` and `strokeText` methods draw text. To create custom shapes, we must first build up a path. {{index stroking, filling}} -Calling `beginPath` starts a new path. A number of other methods add -lines and curves to the current path. For example, `lineTo` can add a -straight line. When a path is finished, it can be filled with the -`fill` method or stroked with the `stroke` method. +Calling `beginPath` starts a new path. A number of other methods add lines and curves to the current path. For example, `lineTo` can add a straight line. When a path is finished, it can be filled with the `fill` method or stroked with the `stroke` method. -Moving pixels from an image or another canvas onto our canvas is done -with the `drawImage` method. By default, this method draws the whole -source image, but by giving it more parameters, you can copy a -specific area of the image. We used this for our game by copying -individual poses of the game character out of an image that contained -many such poses. +Moving pixels from an image or another canvas onto our canvas is done with the `drawImage` method. By default, this method draws the whole source image, but by giving it more parameters, you can copy a specific area of the image. We used this for our game by copying individual poses of the game character out of an image that contained many such poses. -Transformations allow you to draw a shape in multiple orientations. A -2D drawing context has a current transformation that can be changed -with the `translate`, `scale`, and `rotate` methods. These will affect -all subsequent drawing operations. A transformation state can be saved -with the `save` method and restored with the `restore` method. +Transformations allow you to draw a shape in multiple orientations. A 2D drawing context has a current transformation that can be changed with the `translate`, `scale`, and `rotate` methods. These will affect all subsequent drawing operations. A transformation state can be saved with the `save` method and restored with the `restore` method. -When showing an animation on a canvas, the `clearRect` method can be -used to clear part of the canvas before redrawing it. +When showing an animation on a canvas, the `clearRect` method can be used to clear part of the canvas before redrawing it. ## Exercises @@ -1268,16 +918,11 @@ Write a program that draws the following ((shape))s on a ((canvas)): {{figure {url: "img/exercise_shapes.png", alt: "The shapes to draw",width: "8cm"}}} -When drawing the last two, you may want to refer to the explanation of -`Math.cos` and `Math.sin` in [Chapter ?](dom#sin_cos), which describes -how to get coordinates on a circle using these functions. +When drawing the last two, you may want to refer to the explanation of `Math.cos` and `Math.sin` in [Chapter ?](dom#sin_cos), which describes how to get coordinates on a circle using these functions. {{index readability, "hard-coding"}} -I recommend creating a function for each shape. Pass the position, and -optionally other properties such as the size or the number of points, -as parameters. The alternative, which is to hard-code numbers all over -your code, tends to make the code needlessly hard to read and modify. +I recommend creating a function for each shape. Pass the position, and optionally other properties such as the size or the number of points, as parameters. The alternative, which is to hard-code numbers all over your code, tends to make the code needlessly hard to read and modify. {{if interactive @@ -1296,43 +941,23 @@ if}} {{index [path, canvas], "shapes (exercise)"}} -The ((trapezoid)) (1) is easiest to draw using a path. Pick suitable -center coordinates and add each of the four corners around the center. +The ((trapezoid)) (1) is easiest to draw using a path. Pick suitable center coordinates and add each of the four corners around the center. {{index "flipHorizontally function", rotation}} -The ((diamond)) (2) can be drawn the straightforward way, with a path, -or the interesting way, with a `rotate` ((transformation)). To use -rotation, you will have to apply a trick similar to what we did in the -`flipHorizontally` function. Because you want to rotate around the -center of your rectangle and not around the point (0,0), you must -first `translate` to there, then rotate, and then translate back. +The ((diamond)) (2) can be drawn the straightforward way, with a path, or the interesting way, with a `rotate` ((transformation)). To use rotation, you will have to apply a trick similar to what we did in the `flipHorizontally` function. Because you want to rotate around the center of your rectangle and not around the point (0,0), you must first `translate` to there, then rotate, and then translate back. -Make sure you reset the transformation after drawing any shape that -creates one. +Make sure you reset the transformation after drawing any shape that creates one. {{index "remainder operator", "% operator"}} -For the ((zigzag)) (3) it becomes impractical to write a new call to -`lineTo` for each line segment. Instead, you should use a ((loop)). -You can have each iteration draw either two ((line)) segments (right -and then left again) or one, in which case you must use the evenness -(`% 2`) of the loop index to determine whether to go left or right. +For the ((zigzag)) (3) it becomes impractical to write a new call to `lineTo` for each line segment. Instead, you should use a ((loop)). You can have each iteration draw either two ((line)) segments (right and then left again) or one, in which case you must use the evenness (`% 2`) of the loop index to determine whether to go left or right. -You'll also need a loop for the ((spiral)) (4). If you draw a series -of points, with each point moving further along a circle around the -spiral's center, you get a circle. If, during the loop, you vary the -radius of the circle on which you are putting the current point and go -around more than once, the result is a spiral. +You'll also need a loop for the ((spiral)) (4). If you draw a series of points, with each point moving further along a circle around the spiral's center, you get a circle. If, during the loop, you vary the radius of the circle on which you are putting the current point and go around more than once, the result is a spiral. {{index "quadraticCurveTo method"}} -The ((star)) (5) depicted is built out of `quadraticCurveTo` lines. -You could also draw one with straight lines. Divide a circle into -eight pieces for a star with eight points, or however many pieces you -want. Draw lines between these points, making them curve toward the -center of the star. With `quadraticCurveTo`, you can use the center as -the control point. +The ((star)) (5) depicted is built out of `quadraticCurveTo` lines. You could also draw one with straight lines. Divide a circle into eight pieces for a star with eight points, or however many pieces you want. Draw lines between these points, making them curve toward the center of the star. With `quadraticCurveTo`, you can use the center as the control point. hint}} @@ -1342,15 +967,9 @@ hint}} {{index label, text, "pie chart example"}} -[Earlier](canvas#pie_chart) in the chapter, we saw an example program -that drew a pie chart. Modify this program so that the name of each -category is shown next to the slice that represents it. Try to find a -pleasing-looking way to automatically position this text that would -work for other data sets as well. You may assume that categories are -big enough to leave ample room for their labels. +[Earlier](canvas#pie_chart) in the chapter, we saw an example program that drew a pie chart. Modify this program so that the name of each category is shown next to the slice that represents it. Try to find a pleasing-looking way to automatically position this text that would work for other data sets as well. You may assume that categories are big enough to leave ample room for their labels. -You might need `Math.sin` and `Math.cos` again, which are described in -[Chapter ?](dom#sin_cos). +You might need `Math.sin` and `Math.cos` again, which are described in [Chapter ?](dom#sin_cos). {{if interactive @@ -1383,19 +1002,11 @@ if}} {{index "fillText method", "textAlign property", "textBaseline property", "pie chart example"}} -You will need to call `fillText` and set the context's `textAlign` and -`textBaseline` properties in such a way that the text ends up where -you want it. +You will need to call `fillText` and set the context's `textAlign` and `textBaseline` properties in such a way that the text ends up where you want it. -A sensible way to position the labels would be to put the text on the -line going from the center of the pie through the middle of the slice. -You don't want to put the text directly against the side of the pie -but rather move the text out to the side of the pie by a given number -of pixels. +A sensible way to position the labels would be to put the text on the line going from the center of the pie through the middle of the slice. You don't want to put the text directly against the side of the pie but rather move the text out to the side of the pie by a given number of pixels. -The ((angle)) of this line is `currentAngle + 0.5 * sliceAngle`. The -following code finds a position on this line 120 pixels from the -center: +The ((angle)) of this line is `currentAngle + 0.5 * sliceAngle`. The following code finds a position on this line 120 pixels from the center: ```{test: no} let middleAngle = currentAngle + 0.5 * sliceAngle; @@ -1403,19 +1014,11 @@ let textX = Math.cos(middleAngle) * 120 + centerX; let textY = Math.sin(middleAngle) * 120 + centerY; ``` -For `textBaseline`, the value `"middle"` is probably appropriate when -using this approach. What to use for `textAlign` depends on which side -of the circle we are on. On the left, it should be `"right"`, and on -the right, it should be `"left"`, so that the text is positioned away -from the pie. +For `textBaseline`, the value `"middle"` is probably appropriate when using this approach. What to use for `textAlign` depends on which side of the circle we are on. On the left, it should be `"right"`, and on the right, it should be `"left"`, so that the text is positioned away from the pie. {{index "Math.cos function"}} -If you are not sure how to find out which side of the circle a given -angle is on, look to the explanation of `Math.cos` in [Chapter -?](dom#sin_cos). The cosine of an angle tells us which x-coordinate it -corresponds to, which in turn tells us exactly which side of the -circle we are on. +If you are not sure how to find out which side of the circle a given angle is on, look to the explanation of `Math.cos` in [Chapter ?](dom#sin_cos). The cosine of an angle tells us which x-coordinate it corresponds to, which in turn tells us exactly which side of the circle we are on. hint}} @@ -1423,10 +1026,7 @@ hint}} {{index [animation, "bouncing ball"], "requestAnimationFrame function", bouncing}} -Use the `requestAnimationFrame` technique that we saw in [Chapter -?](dom#animationFrame) and [Chapter ?](game#runAnimation) to draw a -((box)) with a bouncing ((ball)) in it. The ball moves at a constant -((speed)) and bounces off the box's sides when it hits them. +Use the `requestAnimationFrame` technique that we saw in [Chapter ?](dom#animationFrame) and [Chapter ?](game#runAnimation) to draw a ((box)) with a bouncing ((ball)) in it. The ball moves at a constant ((speed)) and bounces off the box's sides when it hits them. {{if interactive @@ -1457,26 +1057,15 @@ if}} {{index "strokeRect method", animation, "arc method"}} -A ((box)) is easy to draw with `strokeRect`. Define a binding that -holds its size or define two bindings if your box's width and height -differ. To create a round ((ball)), start a path and call `arc(x, y, -radius, 0, 7)`, which creates an arc going from zero to more than a -whole circle. Then fill the path. +A ((box)) is easy to draw with `strokeRect`. Define a binding that holds its size or define two bindings if your box's width and height differ. To create a round ((ball)), start a path and call `arc(x, y, radius, 0, 7)`, which creates an arc going from zero to more than a whole circle. Then fill the path. {{index "collision detection", "Vec class"}} -To model the ball's position and ((speed)), you can use the `Vec` -class from [Chapter ?](game#vector)[ (which is available on this -page)]{if interactive}. Give it a starting speed, preferably one that -is not purely vertical or horizontal, and for every ((frame)) multiply -that speed by the amount of time that elapsed. When the ball gets -too close to a vertical wall, invert the x component in its speed. -Likewise, invert the y component when it hits a horizontal wall. +To model the ball's position and ((speed)), you can use the `Vec` class from [Chapter ?](game#vector)[ (which is available on this page)]{if interactive}. Give it a starting speed, preferably one that is not purely vertical or horizontal, and for every ((frame)) multiply that speed by the amount of time that elapsed. When the ball gets too close to a vertical wall, invert the x component in its speed. Likewise, invert the y component when it hits a horizontal wall. {{index "clearRect method", clearing}} -After finding the ball's new position and speed, use `clearRect` to -delete the scene and redraw it using the new position. +After finding the ball's new position and speed, use `clearRect` to delete the scene and redraw it using the new position. hint}} @@ -1484,38 +1073,21 @@ hint}} {{index optimization, "bitmap graphics", mirror}} -One unfortunate thing about ((transformation))s is that they slow down -the drawing of bitmaps. The position and size of each ((pixel)) has to be -transformed, and though it is possible that ((browser))s will get -cleverer about transformation in the ((future)), they currently cause a -measurable increase in the time it takes to draw a bitmap. +One unfortunate thing about ((transformation))s is that they slow down the drawing of bitmaps. The position and size of each ((pixel)) has to be transformed, and though it is possible that ((browser))s will get cleverer about transformation in the ((future)), they currently cause a measurable increase in the time it takes to draw a bitmap. -In a game like ours, where we are drawing only a single transformed -sprite, this is a nonissue. But imagine that we need to draw hundreds -of characters or thousands of rotating particles from an explosion. +In a game like ours, where we are drawing only a single transformed sprite, this is a nonissue. But imagine that we need to draw hundreds of characters or thousands of rotating particles from an explosion. -Think of a way to allow us to draw an inverted character without -loading additional image files and without having to make transformed -`drawImage` calls every frame. +Think of a way to allow us to draw an inverted character without loading additional image files and without having to make transformed `drawImage` calls every frame. {{hint {{index mirror, scaling, "drawImage method"}} -The key to the solution is the fact that we can use a ((canvas)) -element as a source image when using `drawImage`. It is possible to -create an extra `` element, without adding it to the document, -and draw our inverted sprites to it, once. When drawing an actual -frame, we just copy the already inverted sprites to the main canvas. +The key to the solution is the fact that we can use a ((canvas)) element as a source image when using `drawImage`. It is possible to create an extra `` element, without adding it to the document, and draw our inverted sprites to it, once. When drawing an actual frame, we just copy the already inverted sprites to the main canvas. {{index "load event"}} -Some care would be required because images do not load instantly. We -do the inverted drawing only once, and if we do it before the image -loads, it won't draw anything. A `"load"` handler on the image can be -used to draw the inverted images to the extra canvas. This canvas can -be used as a drawing source immediately (it'll simply be blank until -we draw the character onto it). +Some care would be required because images do not load instantly. We do the inverted drawing only once, and if we do it before the image loads, it won't draw anything. A `"load"` handler on the image can be used to draw the inverted images to the extra canvas. This canvas can be used as a drawing source immediately (it'll simply be blank until we draw the character onto it). hint}} diff --git a/18_http.md b/18_http.md index 3f0713ca4..e920454a1 100644 --- a/18_http.md +++ b/18_http.md @@ -4,10 +4,7 @@ {{quote {author: "Roy Fielding", title: "Architectural Styles and the Design of Network-based Software Architectures", chapter: true} -Communication must be stateless in nature [...] such that each request -from client to server must contain all of the information necessary to -understand the request, and cannot take advantage of any stored -context on the server. +Communication must be stateless in nature [...] such that each request from client to server must contain all of the information necessary to understand the request, and cannot take advantage of any stored context on the server. quote}} @@ -17,22 +14,13 @@ quote}} {{index [browser, environment]}} -The _Hypertext Transfer Protocol_, already mentioned in [Chapter -?](browser#web), is the mechanism through which data is requested and -provided on the ((World Wide Web)). This chapter describes the -((protocol)) in more detail and explains the way browser -JavaScript has access to it. +The _Hypertext Transfer Protocol_, already mentioned in [Chapter ?](browser#web), is the mechanism through which data is requested and provided on the ((World Wide Web)). This chapter describes the ((protocol)) in more detail and explains the way browser JavaScript has access to it. ## The protocol {{index "IP address"}} -If you type _eloquentjavascript.net/18_http.html_ into your browser's -((address bar)), the ((browser)) first looks up the ((address)) of the -server associated with _eloquentjavascript.net_ and tries to open a -((TCP)) ((connection)) to it on ((port)) 80, the default port for -((HTTP)) traffic. If the ((server)) exists and accepts the connection, -the browser might send something like this: +If you type _eloquentjavascript.net/18_http.html_ into your browser's ((address bar)), the ((browser)) first looks up the ((address)) of the server associated with _eloquentjavascript.net_ and tries to open a ((TCP)) ((connection)) to it on ((port)) 80, the default port for ((HTTP)) traffic. If the ((server)) exists and accepts the connection, the browser might send something like this: ```{lang: http} GET /18_http.html HTTP/1.1 @@ -52,14 +40,11 @@ Last-Modified: Mon, 08 Jan 2018 10:29:45 GMT ... the rest of the document ``` -The browser takes the part of the ((response)) after the blank line, -its _body_ (not to be confused with the HTML `` tag), and -displays it as an ((HTML)) document. +The browser takes the part of the ((response)) after the blank line, its _body_ (not to be confused with the HTML `` tag), and displays it as an ((HTML)) document. {{index HTTP}} -The information sent by the client is called the _((request))_. It -starts with this line: +The information sent by the client is called the _((request))_. It starts with this line: ```{lang: http} GET /18_http.html HTTP/1.1 @@ -67,42 +52,19 @@ GET /18_http.html HTTP/1.1 {{index "DELETE method", "PUT method", "GET method", [method, HTTP]}} -The first word is the _method_ of the ((request)). `GET` means -that we want to _get_ the specified resource. Other common methods are -`DELETE` to delete a resource, `PUT` to create or replace it, and `POST` to send -information to it. Note that the ((server)) is not obliged to carry -out every request it gets. If you walk up to a random website and tell -it to `DELETE` its main page, it'll probably refuse. +The first word is the _method_ of the ((request)). `GET` means that we want to _get_ the specified resource. Other common methods are `DELETE` to delete a resource, `PUT` to create or replace it, and `POST` to send information to it. Note that the ((server)) is not obliged to carry out every request it gets. If you walk up to a random website and tell it to `DELETE` its main page, it'll probably refuse. {{index [path, URL], GitHub, [file, resource]}} -The part after the method name is the path of the _((resource))_ the -request applies to. In the simplest case, a resource is simply a -file on the ((server)), but the protocol doesn't require it to be. -A resource may be anything that can be transferred _as if_ it is a -file. Many servers generate the responses they produce on the fly. For -example, if you open -[_https://github.com/marijnh_](https://github.com/marijnh), the server looks -in its database for a user named "marijnh", and if it finds one, it -will generate a profile page for that user. - -After the resource path, the first line of the request mentions -`HTTP/1.1` to indicate the ((version)) of the ((HTTP)) ((protocol)) it -is using. - -In practice, many sites use HTTP version 2, which supports the same -concepts as version 1.1 but is a lot more complicated so that it can -be faster. Browsers will automatically switch to the appropriate -protocol version when talking to a given server, and the outcome of a -request is the same regardless of which version is used. Because version -1.1 is more straightforward and easier to play around with, we'll -focus on that. +The part after the method name is the path of the _((resource))_ the request applies to. In the simplest case, a resource is simply a file on the ((server)), but the protocol doesn't require it to be. A resource may be anything that can be transferred _as if_ it is a file. Many servers generate the responses they produce on the fly. For example, if you open [_https://github.com/marijnh_](https://github.com/marijnh), the server looks in its database for a user named "marijnh", and if it finds one, it will generate a profile page for that user. + +After the resource path, the first line of the request mentions `HTTP/1.1` to indicate the ((version)) of the ((HTTP)) ((protocol)) it is using. + +In practice, many sites use HTTP version 2, which supports the same concepts as version 1.1 but is a lot more complicated so that it can be faster. Browsers will automatically switch to the appropriate protocol version when talking to a given server, and the outcome of a request is the same regardless of which version is used. Because version 1.1 is more straightforward and easier to play around with, we'll focus on that. {{index "status code"}} -The server's ((response)) will start with a version as well, followed -by the status of the response, first as a three-digit status code and -then as a human-readable string. +The server's ((response)) will start with a version as well, followed by the status of the response, first as a three-digit status code and then as a human-readable string. ```{lang: http} HTTP/1.1 200 OK @@ -110,20 +72,13 @@ HTTP/1.1 200 OK {{index "200 (HTTP status code)", "error response", "404 (HTTP status code)"}} -Status codes starting with a 2 indicate that the request succeeded. -Codes starting with 4 mean there was something wrong with the -((request)). 404 is probably the most famous HTTP status code—it means -that the resource could not be found. Codes that start with 5 mean an -error happened on the ((server)) and the request is not to blame. +Status codes starting with a 2 indicate that the request succeeded. Codes starting with 4 mean there was something wrong with the ((request)). 404 is probably the most famous HTTP status code—it means that the resource could not be found. Codes that start with 5 mean an error happened on the ((server)) and the request is not to blame. {{index HTTP}} {{id headers}} -The first line of a request or response may be followed by any number -of _((header))s_. These are lines in the form `name: value` that -specify extra information about the request or response. These headers -were part of the example ((response)): +The first line of a request or response may be followed by any number of _((header))s_. These are lines in the form `name: value` that specify extra information about the request or response. These headers were part of the example ((response)): ```{lang: null} Content-Length: 65585 @@ -133,46 +88,27 @@ Last-Modified: Thu, 04 Jan 2018 14:05:30 GMT {{index "Content-Length header", "Content-Type header", "Last-Modified header"}} -This tells us the size and type of the response document. In this -case, it is an HTML document of 65,585 bytes. It also tells us when -that document was last modified. +This tells us the size and type of the response document. In this case, it is an HTML document of 65,585 bytes. It also tells us when that document was last modified. {{index "Host header", domain}} -For most ((header))s, the client and server are free to decide whether -to include them in a ((request)) or ((response)). But a few are -required. For example, the `Host` header, which specifies the -hostname, should be included in a request because a ((server)) might -be serving multiple hostnames on a single ((IP address)), and without -that header, the server won't know which hostname the client is trying -to talk to. +For most ((header))s, the client and server are free to decide whether to include them in a ((request)) or ((response)). But a few are required. For example, the `Host` header, which specifies the hostname, should be included in a request because a ((server)) might be serving multiple hostnames on a single ((IP address)), and without that header, the server won't know which hostname the client is trying to talk to. {{index "GET method", "DELETE method", "PUT method", "POST method", "body (HTTP)"}} -After the headers, both requests and responses may include a blank -line followed by a body, which contains the data being sent. `GET` and -`DELETE` requests don't send along any data, but `PUT` and `POST` -requests do. Similarly, some response types, such as error responses, -do not require a body. +After the headers, both requests and responses may include a blank line followed by a body, which contains the data being sent. `GET` and `DELETE` requests don't send along any data, but `PUT` and `POST` requests do. Similarly, some response types, such as error responses, do not require a body. ## Browsers and HTTP {{index HTTP, [file, resource]}} -As we saw in the example, a ((browser)) will make a request when we -enter a ((URL)) in its ((address bar)). When the resulting HTML page -references other files, such as ((image))s and JavaScript files, -those are also retrieved. +As we saw in the example, a ((browser)) will make a request when we enter a ((URL)) in its ((address bar)). When the resulting HTML page references other files, such as ((image))s and JavaScript files, those are also retrieved. {{index parallelism, "GET method"}} -A moderately complicated ((website)) can easily include anywhere from -10 to 200 ((resource))s. To be able to fetch those quickly, browsers -will make several `GET` requests simultaneously, rather than waiting -for the responses one at a time. +A moderately complicated ((website)) can easily include anywhere from 10 to 200 ((resource))s. To be able to fetch those quickly, browsers will make several `GET` requests simultaneously, rather than waiting for the responses one at a time. -HTML pages may include _((form))s_, which allow the user to fill out -information and send it to the server. This is an example of a form: +HTML pages may include _((form))s_, which allow the user to fill out information and send it to the server. This is an example of a form: ```{lang: "text/html"}

@@ -184,16 +120,9 @@ information and send it to the server. This is an example of a form: {{index form, "method attribute", "GET method"}} -This code describes a form with two ((field))s: a small one asking for -a name and a larger one to write a message in. When you click the Send -((button)), the form is _submitted_, meaning that the content of its -field is packed into an HTTP request and the browser navigates to the -result of that request. +This code describes a form with two ((field))s: a small one asking for a name and a larger one to write a message in. When you click the Send ((button)), the form is _submitted_, meaning that the content of its field is packed into an HTTP request and the browser navigates to the result of that request. -When the `` element's `method` attribute is `GET` (or is -omitted), the information in the form is added to the end of the -`action` URL as a _((query string))_. The browser might make a request -to this URL: +When the `` element's `method` attribute is `GET` (or is omitted), the information in the form is added to the end of the `action` URL as a _((query string))_. The browser might make a request to this URL: ```{lang: null} GET /example/message.html?name=Jean&message=Yes%3F HTTP/1.1 @@ -201,24 +130,11 @@ GET /example/message.html?name=Jean&message=Yes%3F HTTP/1.1 {{index "ampersand character"}} -The ((question mark)) indicates the end of the path part of the URL -and the start of the query. It is followed by pairs of names and -values, corresponding to the `name` attribute on the form field -elements and the content of those elements, respectively. An ampersand -character (`&`) is used to separate the pairs. +The ((question mark)) indicates the end of the path part of the URL and the start of the query. It is followed by pairs of names and values, corresponding to the `name` attribute on the form field elements and the content of those elements, respectively. An ampersand character (`&`) is used to separate the pairs. {{index [escaping, "in URLs"], "hexadecimal number", "encodeURIComponent function", "decodeURIComponent function"}} -The actual message encoded in the URL is "Yes?", but the question mark -is replaced by a strange code. Some characters in query strings must -be escaped. The question mark, represented as `%3F`, is one of those. -There seems to be an unwritten rule that every format needs its own -way of escaping characters. This one, called _((URL encoding))_, uses -a ((percent sign)) followed by two hexadecimal (base 16) digits that -encode the character code. In this case, 3F, which is 63 in decimal -notation, is the code of a question mark character. JavaScript -provides the `encodeURIComponent` and `decodeURIComponent` functions -to encode and decode this format. +The actual message encoded in the URL is "Yes?", but the question mark is replaced by a strange code. Some characters in query strings must be escaped. The question mark, represented as `%3F`, is one of those. There seems to be an unwritten rule that every format needs its own way of escaping characters. This one, called _((URL encoding))_, uses a ((percent sign)) followed by two hexadecimal (base 16) digits that encode the character code. In this case, 3F, which is 63 in decimal notation, is the code of a question mark character. JavaScript provides the `encodeURIComponent` and `decodeURIComponent` functions to encode and decode this format. ``` console.log(encodeURIComponent("Yes?")); @@ -229,10 +145,7 @@ console.log(decodeURIComponent("Yes%3F")); {{index "body (HTTP)", "POST method"}} -If we change the `method` attribute of the HTML form in the example we -saw earlier to `POST`, the ((HTTP)) request made to submit the -((form)) will use the `POST` method and put the ((query string)) in -the body of the request, rather than adding it to the URL. +If we change the `method` attribute of the HTML form in the example we saw earlier to `POST`, the ((HTTP)) request made to submit the ((form)) will use the `POST` method and put the ((query string)) in the body of the request, rather than adding it to the URL. ```{lang: http} POST /example/message.html HTTP/1.1 @@ -242,16 +155,9 @@ Content-type: application/x-www-form-urlencoded name=Jean&message=Yes%3F ``` -`GET` requests should be used for requests that do not have ((side -effect))s but simply ask for information. Requests that change -something on the server, for example creating a new account or posting -a message, should be expressed with other methods, such as `POST`. -Client-side software such as a browser knows that it shouldn't blindly -make `POST` requests but will often implicitly make `GET` requests—for -example to prefetch a resource it believes the user will soon need. +`GET` requests should be used for requests that do not have ((side effect))s but simply ask for information. Requests that change something on the server, for example creating a new account or posting a message, should be expressed with other methods, such as `POST`. Client-side software such as a browser knows that it shouldn't blindly make `POST` requests but will often implicitly make `GET` requests—for example to prefetch a resource it believes the user will soon need. -We'll come back to forms and how to interact with them from JavaScript -[later in the chapter](http#forms). +We'll come back to forms and how to interact with them from JavaScript [later in the chapter](http#forms). {{id fetch}} @@ -259,9 +165,7 @@ We'll come back to forms and how to interact with them from JavaScript {{index "fetch function", "Promise class", [interface, module]}} -The interface through which browser JavaScript can make HTTP -requests is called `fetch`. Since it is relatively new, it -conveniently uses promises (which is rare for browser interfaces). +The interface through which browser JavaScript can make HTTP requests is called `fetch`. Since it is relatively new, it conveniently uses promises (which is rare for browser interfaces). ```{test: no} fetch("example/data.txt").then(response => { @@ -274,35 +178,17 @@ fetch("example/data.txt").then(response => { {{index "Response class", "status property", "headers property"}} -Calling `fetch` returns a promise that resolves to a `Response` object -holding information about the server's response, such as its status -code and its headers. The headers are wrapped in a `Map`-like object -that treats its keys (the header names) as case insensitive because -header names are not supposed to be case sensitive. This means -`headers.get("Content-Type")` and `headers.get("content-TYPE")` will -return the same value. +Calling `fetch` returns a promise that resolves to a `Response` object holding information about the server's response, such as its status code and its headers. The headers are wrapped in a `Map`-like object that treats its keys (the header names) as case insensitive because header names are not supposed to be case sensitive. This means `headers.get("Content-Type")` and `headers.get("content-TYPE")` will return the same value. -Note that the promise returned by `fetch` resolves successfully even -if the server responded with an error code. It _might_ also be -rejected if there is a network error or if the ((server)) that the -request is addressed to can't be found. +Note that the promise returned by `fetch` resolves successfully even if the server responded with an error code. It _might_ also be rejected if there is a network error or if the ((server)) that the request is addressed to can't be found. {{index [path, URL], "relative URL"}} -The first argument to `fetch` is the URL that should be requested. -When that ((URL)) doesn't start with a protocol name (such as _http:_), -it is treated as _relative_, which means it is interpreted relative -to the current document. When it starts with a slash (/), it replaces -the current path, which is the part after the server name. When it -does not, the part of the current path up to and including its last -((slash character)) is put in front of the relative URL. +The first argument to `fetch` is the URL that should be requested. When that ((URL)) doesn't start with a protocol name (such as _http:_), it is treated as _relative_, which means it is interpreted relative to the current document. When it starts with a slash (/), it replaces the current path, which is the part after the server name. When it does not, the part of the current path up to and including its last ((slash character)) is put in front of the relative URL. {{index "text method", "body (HTTP)", "Promise class"}} -To get at the actual content of a response, you can use its `text` -method. Because the initial promise is resolved as soon as the -response's headers have been received and because reading the response body -might take a while longer, this again returns a promise. +To get at the actual content of a response, you can use its `text` method. Because the initial promise is resolved as soon as the response's headers have been received and because reading the response body might take a while longer, this again returns a promise. ```{test: no} fetch("example/data.txt") @@ -313,16 +199,11 @@ fetch("example/data.txt") {{index "json method"}} -A similar method, called `json`, returns a promise that -resolves to the value you get when parsing the body as ((JSON)) or -rejects if it's not valid JSON. +A similar method, called `json`, returns a promise that resolves to the value you get when parsing the body as ((JSON)) or rejects if it's not valid JSON. {{index "GET method", "body (HTTP)", "DELETE method", "method property"}} -By default, `fetch` uses the `GET` method to make its request and -does not include a request body. You can configure it differently by -passing an object with extra options as a second argument. For -example, this request tries to delete `example/data.txt`: +By default, `fetch` uses the `GET` method to make its request and does not include a request body. You can configure it differently by passing an object with extra options as a second argument. For example, this request tries to delete `example/data.txt`: ```{test: no} fetch("example/data.txt", {method: "DELETE"}).then(resp => { @@ -333,15 +214,11 @@ fetch("example/data.txt", {method: "DELETE"}).then(resp => { {{index "405 (HTTP status code)"}} -The 405 status code means "method not allowed", an HTTP server's way -of saying "I can't do that". +The 405 status code means "method not allowed", an HTTP server's way of saying "I can't do that". {{index "Range header", "body property", "headers property"}} -To add a request body, you can include a `body` option. To set -headers, there's the `headers` option. For example, this request -includes a `Range` header, which instructs the server to return only -part of a response. +To add a request body, you can include a `body` option. To set headers, there's the `headers` option. For example, this request includes a `Range` header, which instructs the server to return only part of a response. ```{test: no} fetch("example/data.txt", {headers: {Range: "bytes=8-19"}}) @@ -350,11 +227,7 @@ fetch("example/data.txt", {headers: {Range: "bytes=8-19"}}) // → the content ``` -The browser will automatically add some request ((header))s, such as -"Host" and those needed for the server to figure out the size of the -body. But adding your own headers is often useful to include things -such as authentication information or to tell the server which file -format you'd like to receive. +The browser will automatically add some request ((header))s, such as "Host" and those needed for the server to figure out the size of the body. But adding your own headers is often useful to include things such as authentication information or to tell the server which file format you'd like to receive. {{id http_sandbox}} @@ -362,25 +235,13 @@ format you'd like to receive. {{index sandbox, [browser, security]}} -Making ((HTTP)) requests in web page scripts once again raises -concerns about ((security)). The person who controls the script might -not have the same interests as the person on whose computer it is -running. More specifically, if I visit _themafia.org_, I do not want -its scripts to be able to make a request to _mybank.com_, using -identifying information from my browser, with instructions to -transfer all my money to some random account. +Making ((HTTP)) requests in web page scripts once again raises concerns about ((security)). The person who controls the script might not have the same interests as the person on whose computer it is running. More specifically, if I visit _themafia.org_, I do not want its scripts to be able to make a request to _mybank.com_, using identifying information from my browser, with instructions to transfer all my money to some random account. -For this reason, browsers protect us by disallowing scripts to make -HTTP requests to other ((domain))s (names such as _themafia.org_ and -_mybank.com_). +For this reason, browsers protect us by disallowing scripts to make HTTP requests to other ((domain))s (names such as _themafia.org_ and _mybank.com_). {{index "Access-Control-Allow-Origin header", "cross-domain request"}} -This can be an annoying problem when building systems that want to -access several domains for legitimate reasons. Fortunately, -((server))s can include a ((header)) like this in their ((response)) -to explicitly indicate to the browser that it is okay for the request -to come from another domain: +This can be an annoying problem when building systems that want to access several domains for legitimate reasons. Fortunately, ((server))s can include a ((header)) like this in their ((response)) to explicitly indicate to the browser that it is okay for the request to come from another domain: ```{lang: null} Access-Control-Allow-Origin: * @@ -390,110 +251,55 @@ Access-Control-Allow-Origin: * {{index client, HTTP, [interface, HTTP]}} -When building a system that requires ((communication)) between a -JavaScript program running in the ((browser)) (client-side) and a -program on a ((server)) (server-side), there are several different -ways to model this communication. +When building a system that requires ((communication)) between a JavaScript program running in the ((browser)) (client-side) and a program on a ((server)) (server-side), there are several different ways to model this communication. {{index [network, abstraction], abstraction}} -A commonly used model is that of _((remote procedure call))s_. In this -model, communication follows the patterns of normal function calls, -except that the function is actually running on another machine. -Calling it involves making a request to the server that includes the -function's name and arguments. The response to that request contains -the returned value. +A commonly used model is that of _((remote procedure call))s_. In this model, communication follows the patterns of normal function calls, except that the function is actually running on another machine. Calling it involves making a request to the server that includes the function's name and arguments. The response to that request contains the returned value. -When thinking in terms of remote procedure calls, HTTP is just a -vehicle for communication, and you will most likely write an -abstraction layer that hides it entirely. +When thinking in terms of remote procedure calls, HTTP is just a vehicle for communication, and you will most likely write an abstraction layer that hides it entirely. {{index "media type", "document format", [method, HTTP]}} -Another approach is to build your communication around the concept of -((resource))s and ((HTTP)) methods. Instead of a remote procedure -called `addUser`, you use a `PUT` request to `/users/larry`. Instead -of encoding that user's properties in function arguments, you define a -JSON document format (or use an existing format) that represents a -user. The body of the `PUT` request to create a new resource is then -such a document. A resource is fetched by making a `GET` request to -the resource's URL (for example, `/user/larry`), which again returns -the document representing the resource. - -This second approach makes it easier to use some of the features that -HTTP provides, such as support for caching resources (keeping a copy -on the client for fast access). The concepts used in HTTP, which are -well designed, can provide a helpful set of principles to design your -server interface around. +Another approach is to build your communication around the concept of ((resource))s and ((HTTP)) methods. Instead of a remote procedure called `addUser`, you use a `PUT` request to `/users/larry`. Instead of encoding that user's properties in function arguments, you define a JSON document format (or use an existing format) that represents a user. The body of the `PUT` request to create a new resource is then such a document. A resource is fetched by making a `GET` request to the resource's URL (for example, `/user/larry`), which again returns the document representing the resource. + +This second approach makes it easier to use some of the features that HTTP provides, such as support for caching resources (keeping a copy on the client for fast access). The concepts used in HTTP, which are well designed, can provide a helpful set of principles to design your server interface around. ## Security and HTTPS {{index "man-in-the-middle", security, HTTPS, [network, security]}} -Data traveling over the Internet tends to follow a long, dangerous -road. To get to its destination, it must hop through anything from -coffee shop Wi-Fi hotspots to networks controlled by various companies and -states. At any point along its route it may be inspected or even -modified. +Data traveling over the Internet tends to follow a long, dangerous road. To get to its destination, it must hop through anything from coffee shop Wi-Fi hotspots to networks controlled by various companies and states. At any point along its route it may be inspected or even modified. {{index tampering}} -If it is important that something remain secret, such as the -((password)) to your ((email)) account, or that it arrive at its -destination unmodified, such as the account number you transfer money -to via your bank's website, plain HTTP is not good enough. +If it is important that something remain secret, such as the ((password)) to your ((email)) account, or that it arrive at its destination unmodified, such as the account number you transfer money to via your bank's website, plain HTTP is not good enough. {{index cryptography, encryption}} {{indexsee "Secure HTTP", HTTPS, [browser, security]}} -The secure ((HTTP)) protocol, used for ((URL))s starting with _https://_, -wraps HTTP traffic in a way that makes it harder to read and tamper -with. Before exchanging data, the client verifies that the server is -who it claims to be by asking it to prove that it has a cryptographic -((certificate)) issued by a certificate authority that the browser -recognizes. Next, all data going over the ((connection)) is encrypted -in a way that should prevent eavesdropping and tampering. - -Thus, when it works right, ((HTTPS)) prevents other people from -impersonating the website you are trying to talk to and from -snooping on your communication. It is not perfect, and there have been -various incidents where HTTPS failed because of forged or stolen -certificates and broken software, but it is a _lot_ safer than plain -HTTP. +The secure ((HTTP)) protocol, used for ((URL))s starting with _https://_, wraps HTTP traffic in a way that makes it harder to read and tamper with. Before exchanging data, the client verifies that the server is who it claims to be by asking it to prove that it has a cryptographic ((certificate)) issued by a certificate authority that the browser recognizes. Next, all data going over the ((connection)) is encrypted in a way that should prevent eavesdropping and tampering. + +Thus, when it works right, ((HTTPS)) prevents other people from impersonating the website you are trying to talk to and from snooping on your communication. It is not perfect, and there have been various incidents where HTTPS failed because of forged or stolen certificates and broken software, but it is a _lot_ safer than plain HTTP. {{id forms}} ## Form fields -Forms were originally designed for the pre-JavaScript Web to allow -web sites to send user-submitted information in an HTTP request. This -design assumes that interaction with the server always happens by -navigating to a new page. +Forms were originally designed for the pre-JavaScript Web to allow web sites to send user-submitted information in an HTTP request. This design assumes that interaction with the server always happens by navigating to a new page. {{index [DOM, fields]}} -But their elements are part of the DOM like the rest of the page, -and the DOM elements that represent form ((field))s support a number -of properties and events that are not present on other elements. These -make it possible to inspect and control such input fields with -JavaScript programs and do things such as adding new functionality to -a form or using forms and fields as building blocks in a JavaScript -application. +But their elements are part of the DOM like the rest of the page, and the DOM elements that represent form ((field))s support a number of properties and events that are not present on other elements. These make it possible to inspect and control such input fields with JavaScript programs and do things such as adding new functionality to a form or using forms and fields as building blocks in a JavaScript application. {{index "form (HTML tag)"}} -A web form consists of any number of input ((field))s grouped in a -`` tag. HTML allows several different styles of fields, ranging -from simple on/off checkboxes to drop-down menus and fields for text -input. This book won't try to comprehensively discuss all field types, -but we'll start with a rough overview. +A web form consists of any number of input ((field))s grouped in a `` tag. HTML allows several different styles of fields, ranging from simple on/off checkboxes to drop-down menus and fields for text input. This book won't try to comprehensively discuss all field types, but we'll start with a rough overview. {{index "input (HTML tag)", "type attribute"}} -A lot of field types use the -`` tag. This tag's `type` attribute is used to select the -field's style. These are some commonly used `` types: +A lot of field types use the `` tag. This tag's `type` attribute is used to select the field's style. These are some commonly used `` types: {{index "password field", checkbox, "radio button", "file field"}} @@ -507,11 +313,7 @@ field's style. These are some commonly used `` types: {{index "value attribute", "checked attribute", "form (HTML tag)"}} -Form fields do not necessarily have to appear in a `` tag. You -can put them anywhere in a page. Such form-less fields cannot be -((submit))ted (only a form as a whole can), but when responding to -input with JavaScript, we often don't want to submit our fields -normally anyway. +Form fields do not necessarily have to appear in a `` tag. You can put them anywhere in a page. Such form-less fields cannot be ((submit))ted (only a form as a whole can), but when responding to input with JavaScript, we often don't want to submit our fields normally anyway. ```{lang: "text/html"}

(text)

@@ -531,16 +333,11 @@ The fields created with this HTML code look like this: if}} -The JavaScript interface for such elements differs with the type of -the element. +The JavaScript interface for such elements differs with the type of the element. {{index "textarea (HTML tag)", "text field"}} -Multiline text fields have their own tag, `` -closing tag and uses the text between those two, instead of the -`value` attribute, as starting text. +Multiline text fields have their own tag, `` closing tag and uses the text between those two, instead of the `value` attribute, as starting text. ```{lang: "text/html"} @@ -800,23 +530,13 @@ tag with an event handler that, when you press F2, inserts the string {{index "replaceSelection function", "text field"}} -The `replaceSelection` -function replaces the currently selected part of a text field's -content with the given word and then moves the ((cursor)) after that -word so that the user can continue typing. +The `replaceSelection` function replaces the currently selected part of a text field's content with the given word and then moves the ((cursor)) after that word so that the user can continue typing. {{index "change event", "input event"}} -The `"change"` event for a ((text -field)) does not fire every time something is typed. Rather, it -fires when the field loses ((focus)) after its content was changed. -To respond immediately to changes in a text field, you should register -a handler for the `"input"` event instead, which fires for every -time the user types a character, deletes text, or otherwise manipulates -the field's content. +The `"change"` event for a ((text field)) does not fire every time something is typed. Rather, it fires when the field loses ((focus)) after its content was changed. To respond immediately to changes in a text field, you should register a handler for the `"input"` event instead, which fires for every time the user types a character, deletes text, or otherwise manipulates the field's content. -The following example shows a text field and a counter displaying the -current length of the text in the field: +The following example shows a text field and a counter displaying the current length of the text in the field: ```{lang: "text/html"} length: 0 @@ -833,8 +553,7 @@ current length of the text in the field: {{index "input (HTML tag)", "checked attribute"}} -A ((checkbox)) field is a binary toggle. Its value can be extracted or -changed through its `checked` property, which holds a Boolean value. +A ((checkbox)) field is a binary toggle. Its value can be extracted or changed through its `checked` property, which holds a Boolean value. ```{lang: "text/html"}