TC39 Shorthand Property Assignment Improvementsの紹介
※これはJavaScript Advent Calendar 2019 7日目の記事です。
この記事ではTC39 のproposalの1つ、「Shorthand Property Assignment Improvements」について紹介します。 以前、勉強会で発表した内容で、スライドはこちらにあります。
TC39って?proposalって?
TC39について、公式サイトの言葉を借りると、
Ecma International's TC39 is a group of JavaScript developers, implementers, academics, and more, collaborating with the community to maintain and evolve the definition of JavaScript.
引用元: https://tc39.es/
早い話、JavaScriptの標準化について、新機能や改善、それらの具体的な実装について、専門とした組織です。
本記事で紹介するのはTC39に提案されているproposalのうちの1つであり、proposalは0から4までの5つのstageがあり、提案内容について議論や、具体的な実装方法について議論されています。
各stageの説明について、詳しくは公式のThe TC39 Processを読むと良いです。 https://tc39.es/process-document/
「Shorthand Property Assignment Improvements」は本日2019/12/07現在でstage 0であり、一番最初、提案内容を紹介する最初のフェーズ。
残念ながら、提案によってはstageが年単位で進んでいないものもあるため、実際にこの提案がJavaScriptの標準に取り込まれるかは、まだわからないです。
Shorthand Property Assignment Improvements
本題であるShorthand Property Assignment Improvementsは、オブジェクトプロパティへの値の代入の省略記法の提案です。
具体的には
- オブジェクトの初期化
- オブジェクトプロパティに対する分割代入
の省略した記法を提案です。
オブジェクトの初期化
// dot notation const a = { x: o.x }; // bracket notation const b = { 'x': o['x'] };
これを
// dot notation const a = { o.x }; // bracket notation const a = { o['x'] };
と記述できるようにするという内容です。
似たものとして既存のJavaScriptにおいても、ES2015から変数をオブジェクトプロパティに割り当てる際に、同名プロパティに割り当てるならば、プロパティ名を省略することができますね。 他のオブジェクトのプロパティを割り当てることはできないので、これをカバーするというところかもしれないですね。
const a = "Hello!"; const b = { a }; console.log(b); // { a: "Hello!" }
オブジェクトプロパティに対する分割代入
次に、オブジェクトプロパティに対する分割代入の省略記法です。 初期化と同様の省略記法を、もちろん分割代入でも利用できるようにしようという話です。
// dot notation ({ x: a.x } = o); // bracket notation ({ a.x } = o);
これを
// dot notation ({ 'x': a['x'] } = o); // bracket notation ({ a['x'] } = o);
と記述できるようにする。
まとめ
「Shorthand Property Assignment Improvements」はオブジェクトプロパティの割り当ての際の省略記法の提案です。
自分の所感としては、記述が簡潔になり、コードとして冗長な記述をしなくてよくなるのはよいかな〜と感じます。
1つのプロパティについて、割り当てるプロパティを変更する際、
- 割り当て先のプロパティ名
- 割り当て元のプロパティ名
の二箇所を修正しなければいけないところが
- 割り当て元のプロパティ名
のみを修正することで、対応できるようになるのは少し嬉しいですね。
JavaScript アドベントカレンダー 2019
これはJavaScript Advent Calendar 2019 7日目の記事です。
昨日、6日目の記事はこちらになります。