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!" }

developer.mozilla.org

オブジェクトプロパティに対する分割代入

次に、オブジェクトプロパティに対する分割代入の省略記法です。 初期化と同様の省略記法を、もちろん分割代入でも利用できるようにしようという話です。

// 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日目の記事はこちらになります。