ES6+カジュアルトークでES7について発表してきた
ES6+カジュアルトーク - connpass
ES6+カジュアルトーク に参加と発表してきました。
自分は明日には使えなくなるES7トークというES7の話をしてきました。
「runstant 始めるEcmaScript6 入門」 by @phi_jp
- runstant
- jsfiddle的なツール
- ハンズオン
let
- 2進数を直接書ける
- デフォルトパラメータ
- 引数にデフォルト値を設定出来る
- 分割代入
- template strings
- バッククオートでヒアドキュメントを書ける
class
syntax
「Node.js v0.12で使えるようになるES6+αの機能」 by @yosuke_furukawa
- Node.jsの0.12のビルドして入ってるV8のES6の機能について
--harmony-typeof
が消えたtypeof null
が消えた- これからも
typeof null
はobjectのまま
harmony_arrow_function
=>
v0.12でデフォルトになった機能
- Symbol
- オブジェクトのkeyに利用できる特殊なキー
Symbol
を使うと外のスコープから見えないキーを作れる- 外からキーを指定できないので、Privateなプロパティを作れる
- Private properties in JavaScript — Curiosity driven
- Map/Set
- Collectionとなるオブジェクト
- いわゆるマップオブジェクト
- Set
- 重複を持たない
- Mapで実装されてる?
- collection.js - v8 - V8 JavaScript Engine - Google Project Hosting
for-of
- iterableなものを繰り返し辿れる
- Arrayなども回せる
- Generatorはiterableなもの(nextで次へ行ける)
- for-ofでGnerator関数を回せる
- 自分でiteratorを作ることも出来る
[Symbol.iterator](){
}
- Promise
- 非同期関数をPromiseでラップして処理する
Object.observe
- ES7の機能
Array
やObject
の変更を正しく監視出来る
「ECMAScript6による 関数型プログラミング」 by @TanUkkii007
- 関数型プログラミングの構成要素
- 第一級オブジェクトとしての関数
- イミュータビリティ
- 副作用を排除出来る
- JavaScript と Scheme について - ksmakotoのhatenadiary
const
- 再代入できない変数
strict mode
- 分割代入(デストラクチャリング)
- 配列やオブジェクトからパターンで値を抽出
- 再帰で繰り返し処理
- ES6では末尾呼び出し最適化が入る
- プロキシ
- 既存のオブジェクトをラップしてその一部の内部メソッドの挙動を変えることが出来る
- ラップする内部の挙動(トラップ)を指定して、既存処理に対して処理を割り込める
- 配列に割り込んでコピーを返すようにする = 不変配列を作れる
get
トラップの中で呼び出されたメソッド破壊的なメソッドだったら、sliceでコピーを返す- 透過的なAPIを保ちながら不変配列を作れる
- Immutable Array
「Introduing Break the Web: Array extra methods case」by @Constellation
- ES6でメソッドが追加されて
Array.prototype.values
Array.prototype.keys
Array.prototype.entries
- 等便利なメソッドが入った
- 既に同じ名前で定義してるやつがあるのでは…
- 全く同じ挙動ならいいけどそうではない
with
ブロックの中ではES6の配列拡張は隠れてる@@unscopables
というプロパティにvalues
等が入ってる- Safe break the web
- このハックによりES6になっても壊れない
- MooTools
Array#contains
- enumableなものとして定義してる
- ES5では
contains
はnon-enumable - ES6では変わった
- jsfiddleやoutlook.com等が壊れた
- Case Study 2
Array.prototype.values
をChromeにPublicにした"values" in
という判定で処理をわけてた- Chromeでは常にtrueになるので壊れた
- 学び
- 短縮された判定をするな(
in
)hasOwnProperty
等を使いましょう
- 今のオブジェクトの形に依存するな
- 今定義されてるメソッド一覧の配列で定義しないで、列挙を使って実行時に取り出そう
- ✘
["map", "each"...]
use strict
を使おう
- 短縮された判定をするな(
「Closure CompilerのES6対応 あるいは ES6時代のAltJS生存戦略」 by @teppeis
- Closure Compiler
- JavaScript to JavaScript
- 圧縮、最適化
- JSDocベースの静的型付け
- RefasterJS(自動リファクタリング)
- Conformance(規約チェック)
- JSDocベースの静的型付け
- 冗長だけど、既存のJSとの親和がある
- JavaScriptの進化に追従できる
- コンパイルなしでも実行可能
- Compile ES6 to ES3
- in,outで指定出来る
- 結構色々サポートしてる
- ECMAScript 6 compatibility table
- なぜClosure CompilerはTraceurを使わないか
- Traceurは変換結果にコメントを残せない
- Closure CompilerはJSDocが大事
- パフォーマンスの問題
- Closure Compiler + Traceurに変換が二重になる
- Traceurの微妙なところ
- 自前で実装する基準が良く分からない
- ランタイムがでかくなる
- コンパイル不要な機能も入ってる
- AltJS
- 各種AltJSが色々できた
- ES6/7だけでも十分モダンなsyntaxに
- 各ブラウザとかコンパイラがES6対応していってる
- AltJSの選定基準
- コンテキストにおけるJSの不満を解決
- AltJSからの出口戦略
- プロダクトとAltJSどっちが長生きかどうか
- 開発の継続性
- 移行コスト
- Closure CompilerはECMAScript準拠の強み
- JSDocなので、基本的に移行には強い
- ES6時代のAltJS
- 最強の出口は標準化してしまうこと
- 大統一言語
明日には使えなくなるES7トーク - @azu_re
明日には使えなくなるかもしれないES7+で提案されてる仕様についての発表をしてきました。
まだ実装もないような仕様についてが中心です。
ECMAScript 7の策定プロセス
- Stage 0.
Strawman
: ESに入れたいアイデアを議論する段階 - Stage 1.
Proposal
:Strawman
を具体化、デモ作成、分析 - Stage 2.
Draft
: 正式な仕様定義の形式で仕様書を書く段階 - Stage 3.
Candidate
: Draftの実装等をしてフィードバック - Stage 4.
Finished
: ECMAScriptに正式採用 - Test262へ実装
このプロセスに沿ったStageごとに仕様紹介と最近話題のTypesやAtScript、Flowといった話についてをしました。
詳しくは明日には使えなくなるES7トークを下にスクロールするとキャプションが見えます。
メモ
- FoldingText
- Deckset
懇談会
- JSer.info 200回記念イベントについてのパネルディスカッションの打ち合わせをした
- JSer.info 200回記念イベントの質問 - Google モデレーターに質問を当日まで貯めています
- オレオレFluxの流行やリアルワールドのAltJSどうなのという話をしました
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。