ECMAの提案は、レコードとタプルをJavaScriptにもたらします

JavaScriptは、Web開発用の一般的なプログラミング言語を監督する標準化団体であるECMA Internationalの前の提案の下で、レコードとタプルの値型を取得します。

レコードとタプルは、JavaScriptに2つの非常に不変のデータ構造を導入します。1つRecordはオブジェクトのような構造で、もう1つTupleは配列のような構造です。JavaScriptの基礎となる標準であるECMAScriptを管理するECMA技術委員会39による計画の草案。

提案の状態であるレコードとタプルには、プリミティブと他のレコードとタプルのみを含めることができます。それらは「複合プリミティブ」と考えることができます。そして、プリミティブに完全に基づいていることにより、それらは深く不変です。オブジェクトや配列と同様に、レコードやタプルは、構築、使用、操作のための快適なイディオムをサポートしていると提案は述べています。それらは、アイデンティティではなくコンテンツによって比較されます。

JavaScriptエンジンは、文字列の実装方法と同様に、レコードとタプルの構築、操作、および比較に対して特定の最適化を実行する場合があります。レコードとタプルは、TypeScriptやFlowなどの外部型システムスーパーセットで使用および理解できるようにすることを目的としています。

現在、immutable.jsなどのユーザーランドライブラリは同様の概念を実装しています。不変のデータ構造に関する以前のECMA提案が試みられましたが、複雑さと十分なユースケースの欠如のために放棄されたと提案は述べています。新しい提案では、大幅な変更が導入され、次のようなユーザーランドライブラリよりも使いやすさが向上しています。

  • レコードとタプルは、デバッガーで簡単にイントロスペクトできます。
  • 不変オブジェクトとJSオブジェクトを使用する汎用ライブラリを作成するために追加の分岐は必要ありません。
  • 開発者が通常のJSオブジェクトと不変の構​​造の間でコストのかかる変換を行う可能性があるユースケースは回避されます。

レコードとタプルは、オブジェクトや配列とうまく相互運用します。それらは、オブジェクトや配列と同じ方法で読み取ることができます。主な違いは、深い不変性と、アイデンティティではなく値による比較にあります。また、提案された構文は、コードでの使用RecordTupleコードでの人間工学を大幅に改善します。

ECMAScript仕様の最新バージョンであるバージョン2020が6月に採用されました。モジュールのロードや新しいBigIntタイプなどの分野で機能を備えていました。