karino2 / karino2.github.io

This site is auto generated from issues.
7 stars 2 forks source link

Exploring ES6 #195

Closed karino2 closed 6 years ago

karino2 commented 6 years ago

あらすじ

なんだかんだでちょっとしたJSを書く機会が無くならないので、雑用を楽に書く為にES2015の便利機能も使いたいな、と思うようになる。 AndroidとPCの最新のChromeで動けばもう使ってもいいか、という感じなので。

MDNを見つつアロー演算子やfor of、テンプレートリテラル、destructuringあたりは使っていて、結構便利だな、と思ってた。ここらで一通り他の事も知っておいても良いかな、という気分になる。classと以前のコンストラクタやprototypeとのインターオペラビリティとか、generatorとかをちゃんと知りたい。 ただ趣味でちょっと書く程度なので、本気でスペシャリストになる気は無い。 古いブラウザとかBabelとかは全然興味無い。

自分は古い話になるがECMAScript 3は業務で使ってたレベルでプロフェッショナル。 なので、それを前提に、新機能についてちゃんと解説されてる本は何か無い?とomo先生に聞いたら、あんま詳しくないがExploring ES6とかどうなんだろう?と言われた。
web版をチラチラ読んだら悪く無さそうなので、epubを買って読む事に。

以前はpdfにこだわってたが、最近はepubもコード引用とかも結構まともに書かれるようになったし、久しぶりに起動したらPlay Booksも大分良くなってたので、読むのはepubでいいかなぁ、という気分に。一応pdfもダウンロードしておくが、多分見る事は無い気がする。

ページ送りとかが早いの大切だよねぇ。Perfect Viewerとかそろそろ辛い。誰か直さないかなぁ。forkしようかなぁ。でもなぁ。まぁいい。

karino2 commented 6 years ago

第一印象

最初ES6というタイトルだったのでES2015という名前になる前の本なのかと思ったが、ES2015の名前が言及されてるので、ES2015を知りたいという自分にも問題無いらしい。よしよし。

karino2 commented 6 years ago

第一章、バージョンの話

JScriptやJScript.NETまでは触ってたので、その後ES4がどうなったのかとかは興味はあったが全然知らなかったので、なかなか面白かった。

ただこういうのにはあんま深入りしたくないね。自分はもうwebの人じゃないので、ES2015を使う、過去の事はまぁどうでも良い、というスタンスを取りたい。

ただこの章、良く書けてるね。

karino2 commented 6 years ago

3章 One JavaScript

2章はFAQであまり得る物無しなのでこのブログ的には飛ばして三章。

strictで何が起こるのかちゃんと見たのはこれがはじめてかも。

バージョニングはES4の失敗をリアルタイムで見てたので「分かるわー」という印象が強い。ただdeprecated にしていく事は出来ると思うけどね。

karino2 commented 6 years ago

mobiでKindleも悪くないかも

フランス語でそろそろ使うかもしれないから、という事で久しぶりにpaperwhiteを取り出した。

で、ES6本もKindleで読みたいな、という事でmobiを送ってみた所、結構普通に読める。 コメントとかの色違いは見づらいが、そのくらいなら我慢も出来るし。 なんか画面のロックとかも無いし、バッテリの保ちがいいからつけっぱでもいいか、と思えるので、結果としてすぐ読めるのだよな。 それが気分良さにつながってる。

karino2 commented 6 years ago

4章 Core ES6 features

良く使うES6の新機能を簡単に説明した章。 むしろここだけでいいんじゃね?という位良く書けている。

spread operatorって使った事無かったので、この機会に覚える。11.8に詳細があるとの事なのでリンクを辿って一通り読む。ふむふむ。

classのあたりも15章のリンクを辿って読む。どういうprototypeに翻訳されるか、とかもちゃんと書いてあって、まさに自分が読みたかったあたりなので満足。良い本だね。

karino2 commented 6 years ago

4.18でmoduleがブラウザでは使えない、となってるが、ググったらimportとexportは最近のブラウザならどれでも動きそうだな。 よしよし。

karino2 commented 6 years ago

4章は素晴らしいな

読み終わったので感想とか。

ES6を知りたい、という人がどういう人かを良くわかってる本になっていて素晴らしい。

ES5についてはある程度の専門的な知識をちゃんと前提として書いてくれているので、知りたい所がちゃんと簡潔に書かれている。

以前のバージョンのJSを知らない人には真意が分かりづらい所もあるのだけど、ES6をちゃんと知りたい、という人の大多数はES5以前のJSはちゃんと詳しい、という事が多いと思うので、 ちゃんとES6という言語の特殊性を考慮に入れた素晴らしい構成と思う。
普通の言語とはいろいろ違うし、ましてやES6はさらにいろいろ違う。込み入った事態をちゃんと理解したい、と思う時点で、以前のバージョンに詳しいのは現実問題として前提にして良かろう。

実務で急いで使うなら、まず4章読んで、気になった所だけそこからリンク辿って読むだけでも十分かもしれない。

karino2 commented 6 years ago

5章 NumberとMathは流し読み

isSafeIntegerの説明で53bitだ、みたいな話を見る。 へー、こんなのも追加されてるのか。 JSは結構書いたが53bit越えて困った事は無いなぁ。

この章の内容はある程度浮動小数点とかのバックグラウンドが無いとさっぱりだろうな。

karino2 commented 6 years ago

6章のStringも読み飛ばし

テンプレート文字は8章との事なので、この章は流し読み。tagged templateは初めて知った。

karino2 commented 6 years ago

7章 Symbol

シンボルは初見なので真面目に読む。 同じ文字でも別のシンボル作れるのね。 そしてfor inでは表示されないって…

property nameとproperty symbolとかうんざり過ぎる。ES6はこういう言語になってしまったのね。

結果としてkeysではkeysは列挙されずにstring keysだけ列挙されます、とか。これは仕方ないね。

karino2 commented 6 years ago

iterable相当をシンボルで実現するのはなるほど、という気がする。 これはJS的やね。なかなか良い。

karino2 commented 6 years ago

Symbol読み終わった。 知らない事も多くて勉強になった。

なんかあんまりこういう記述がすっきりしてない言語機能は好きになれないが、 JSがこういうのが必要な段階に来ているというのは分かるので仕方ない。

karino2 commented 6 years ago

8章 Template Literalとtagged template

Template Literalは普段から便利に使わせてもらってるが、tagged template literalは使った事無い。 いい機会なのでちゃんと勉強する。

karino2 commented 6 years ago

8.3.8のGraphQLの例は良く分からんな。 たぶんRelayを別に勉強する必要がありそうだが、別段興味も無いので分からないままでいいか。

tagged templateはあれば便利かもしれないが、言語のコア機能に要るのか?というのは微妙な所。 DSL作るのに便利だろうが、使われすぎる未来が容易に想像出来る。

karino2 commented 6 years ago

8.4のtag functionの実装は良く書けている

rawとcookedが渡されるが、この時テンプレートは毎呼び出しで同じオブジェクトがくる事が保証されるらしい。 良く考えてある仕様だね。さすが。

この辺は今のところ自分で使いたいとは思わないが、有効活用してるコードが流行った時に仕組みを知ってると適応も早いので知っておく価値はある気がする。

karino2 commented 6 years ago

8.4.2 tagged template literalのエスケープ

こういうのはちゃんと細かく書いておいてくれるとありがたいね。 この辺よく書けた本だ。

8章読み終わり

8章は読み応えあった。この辺はよく使うので、ちゃんと知っておくモチベーションも高いしね。

そしてこの本は期待に応えて良く書けていた。これだけ良く書けていたら、 遊びで触る程度なら仕様書は見なくてもいいかな、という気がする。 8章を読んで、買って良かったな、という気がした。買うかどうか迷ってる人はweb版で8章だけ読んで判断するのが良いかも。

全体的にES5は知ってる、という前提で進むのだけど、この要求水準が結構高い気がする。 自分がついていけるのだからこの位は要求して良いのかもしれないが、 初めてJSを本格的に勉強してみよう、という人には良く分からない事も多そう(関連するブログなどにはリンクが貼られているので読んで行けば分かるのかもしれないが)。 なんだかんだで自分は昔、仕事で使ってたので、結構細かい事まで知ってる方だと思う。

karino2 commented 6 years ago

9章 変数とか

var、let、constは別に知らない事も無いだろう、という気がするが一応読んでおく。

temporal dead zoneという用語は初めて知ったな。

9.5のfor文

varだとアロー関数で全部最後の変数が参照される、というのは罠だなぁ。 そしてletだと毎回別の変数になる。うへぇ。

なお対応するスペックの場所とその解釈が載ってるのは嬉しいね。

karino2 commented 6 years ago

9.7 windowのメンバ

Classはwindowオブジェクトのプロパティにはならない!へー。

そしてletも入らないんだね。 こっちはなんか入ってない気はしてたので驚きは無いが。

でも入ったり入りなかったりややこしい言語になったな…

karino2 commented 6 years ago

9.8 function declarationはブロックスコープ

へー、そうだっけ。hoistされるからfunction scopeな気がしてたが違うのか。 TDZが無いだけなのね。

それにしても関数定義はwindowオブジェクトに入るがclass定義はwindowオブジェクトに入らないって、凄い言語だな。

classがhoistされないのは有名だが、理由がextendsがexpressionだから、というのはちょっと笑ってしまうな。

karino2 commented 6 years ago

9章読み終わり

変な落とし穴はいろいろあるので読む価値はある。 ただあんまりこの辺詳しくなりたいとも思わないので、必読だ!とも思わないが。

本は良く書けているね。スコープの辺知りたい人は必読書と思う。 仕様書も読むにせよ、その前に読んでおく価値はある。

karino2 commented 6 years ago

10章 Destructuring

この辺もそんな難しい事は無い気はするが、良く使うので見てはおこう。

karino2 commented 6 years ago

curly barceで始められない(シンタックスエラーになるから)と、正規表現のunmatchがnullを返すとエラーになっちゃう、はちょっと驚きがあるが、他の内容は特に意外な事はなし。

最後のフォーマルなアルゴリズムの記述は飛ばす。お仕事で使わない限りはここまで理解せんでも良かろう、という事で。

karino2 commented 6 years ago

11章 引数まわり

Destructuringを読んだあとなので、別段分からん事も無さそう。ガンガン読み飛ばす。

名前付き引数もどきを作る時、引数無いとundifinedでToObject失敗するからデフォルトパラメータ作るのが大切だぜ、とかいう記述はうんざり意外の何者でも無いが、あんま使わなければ良い。

Mapにはmap関数無いが配列へのspreadとmapを組み合わせると出来るぜ!とかいうのもうんざりだが、出来ないよりは良い。

一通り読み終わったが、別段たいした内容は無し。10章読んでたらサラッと流すだけでいいね。