Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ECMAScript 2020の対応 #1145

Closed
12 tasks done
azu opened this issue Apr 8, 2020 · 19 comments · Fixed by #1252
Closed
12 tasks done

ECMAScript 2020の対応 #1145

azu opened this issue Apr 8, 2020 · 19 comments · Fixed by #1252

Comments

@azu
Copy link
Collaborator

azu commented Apr 8, 2020

ECMAScript 2020のリリース候補がでたので、どうするか検討する。

この書籍の目的としては現実のユースケースを反映することであって、リファレンスになることが目的ではない。
そのため、仕様に入っても追加しないという判断もあるので、ここのProposalごとに決めていく必要がある。

Proposals

BigInt(プリミティブの種類)、globalThis(thisの説明)、Nullish coalescing Operator(デフォルト引数)、 Optional chaining(undefined?まわり)あたりは必要になる気がする。

対応後

追記:

対応するべきものはIssueを個別に切ったので、やりたい人がいたらコメントしてください。
good first issue は簡単なIssueです。

@azu
Copy link
Collaborator Author

azu commented Apr 20, 2020

@azu
Copy link
Collaborator Author

azu commented Jun 17, 2020

https://www.ecma-international.org/news/index.html
ES2020が正式にリリースされた

@azu
Copy link
Collaborator Author

azu commented Jun 20, 2020

現実的な話としてはFirefoxも対応してないと使えない(試せない)ということがあるので、
対応するかは次の基準が入る

  • 大体のブラウザで動く
  • ユースケースがある程度見えているものである
  • 既存の説明に齟齬がでる変更(BigIntとかはプリミティブなので未対応でも入れるべき)

@azu
Copy link
Collaborator Author

azu commented Jun 20, 2020

まずは、どの項目から対応する(対応できる)かの一覧を作る。対応するべきものは別途Issueを作って対応する

@azu
Copy link
Collaborator Author

azu commented Jun 20, 2020

ES2020: export * as ns from "mod";の対応 · Issue #1177 · asciidwango/js-primer
は一行追加するだけだし、対応して良さそう

@azu
Copy link
Collaborator Author

azu commented Jun 20, 2020

Nullish coalescing Operator

Null合体演算子 - JavaScript | MDN
合体という訳は微妙な気がするけど、これはデフォルト引数の || の問題を解決する話、falsyの話と関係するので入れるのは妥当な気がする。

https://jsprimer.net/basic/function-declaration/#function-default-parameters

falsyの話題自体はif文と関係するから残るはず。
|| での判定の問題にフォーカスするのがいい気がする。
デフォルト引数の解決のパターンとして並べるのが妥当かもしれない?
演算子に入るイメージはあんまりないのかも。演算子が肥大化するから、一旦演算子の章を整理して必須じゃないものは全部消すとかしてもいい。

Issue: #1178

@azu
Copy link
Collaborator Author

azu commented Jun 20, 2020

Optional chaining

Optional chaining - JavaScript | MDN

https://jsprimer.net/basic/object/#confirm-property でまさにその事例があるので、ここで紹介する。
#1178 Nullish coalescing Operatorとの組み合わせについても紹介するといいのかもしれない?
ユースケースでこういう箇所あるかな?

Issue: #1179

@azu
Copy link
Collaborator Author

azu commented Jun 20, 2020

for-in mechanics

for...in文はオブジェクトのプロパティに対して、順不同で反復処理を行います。
https://jsprimer.net/basic/loop/#for-in-statement

これが仕様で定義されるようになったので、順不同でとすればOKそう。
footerでES2020で順番が定義されたことについて追加する

Issue: #1180

@azu
Copy link
Collaborator Author

azu commented Jun 20, 2020

globalThis

ブラウザならwindowオブジェクト、Node.jsならglobalオブジェクトとなります。
https://jsprimer.net/basic/function-this/#execution-context-this

これをまとめた概念としてglobalThis がES2020で追加されたことについてを追加する。

Issue: #1181

@azu
Copy link
Collaborator Author

azu commented Jun 20, 2020

Promise.allSettled()

tc39/proposal-promise-allSettled: ECMAScript Proposal, specs, and reference implementation for Promise.allSettled

ユースケースがちょっと出てこない

Promise本では網羅的に対応するべきだけど、JS Primerだといらないかもしれない。
わざと失敗しても取得したいケースみたいな例示にしかできない感じ。
Promise.allSettled (ES2020) · Issue #330 · azu/promises-book

@azu
Copy link
Collaborator Author

azu commented Jun 20, 2020

BigInt

プリミティブ型と整数のところで紹介する。
実際の使い方まではやらない気がする。Mathがあまりにも弱いので、BigIntだけ対応しても微妙。
Math自体の強化と合わせて考えてやる必要がある

Issue #445

@azu
Copy link
Collaborator Author

azu commented Jun 20, 2020

String.prototype.matchAll

https://jsprimer.net/basic/string/#match-by-regexp
でexecを使ったmatchAllを実装している。
これをmatchAllを使ったやり方を紹介する。
exec自体はよく見かけるから、残す感じがする。
matchAll自体をセクションとして入れるとか?

String.prototype.matchAll() - JavaScript | MDN

Issue: #1182

@azu
Copy link
Collaborator Author

azu commented Jun 20, 2020

import() と import.meta

ユースケースででてきてないので微妙かもしれない。
ユースケースの範囲で対応してないと出す意味はない気がする。
これが必要になるのは、なんかもうちょいアプリがでかい場合な気がする。

@azu
Copy link
Collaborator Author

azu commented Jun 20, 2020

一応それぞれ対応予定のIssueを作りました /cc @lacolaco

@azu
Copy link
Collaborator Author

azu commented Jul 5, 2020

付録: JavaScriptチートシート · JavaScript Primer #jsprimer
チートシートも対応する #1204

@azu
Copy link
Collaborator Author

azu commented Jul 5, 2020

Dynamic Import も対応したいけど、これECMAScriptの章自体を書き換えないと行けない気がする。
このIssueとは別でやった方がよさそう。(ECMAScriptの章を実行可能な状態でやりたい感じ)

@azu
Copy link
Collaborator Author

azu commented Jul 5, 2020

JavaScriptのすべての文法や機能を網羅するのが目的ではない
JavaScriptのリファレンスとなることが目的ではない
本書の目的ではないこと

この辺をちゃんと把握して進められるようにするため、新しく項目増やすときにチェックする項目がほしい感じ。

@azu
Copy link
Collaborator Author

azu commented Aug 29, 2020

Features tagged “ES2020” · V8
V8のブログが結構まとまっているので良さそう

@azu
Copy link
Collaborator Author

azu commented Aug 29, 2020

ES2020は全て対応できた 🎉

あとはバージョンの更新とリリースノートを書く

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant