LoginSignup
7
2

More than 3 years have passed since last update.

TypescriptのUnion型の和訳が全然統一されていない件について

Posted at

TypescripにはUnion型と言うものがあります。
特定の値が複数の型のうち、いずれかであるというものです。

type HOGE = PIYO | FUGA //HOGE型の値にはPIYO型またはFUGA型の値が入る

しかし、このUnion型、和訳が全然統一されていません。
対となるIntersection型の和訳は交差型で統一されているにも関わらず、
jsStudioによる公式ドキュメントの和訳だと共用体型、Qiitaの記事でも合併型直和型など色々使われていますし、TypeScriptDeepDiveの日本語版だとintersection型は交差型と訳しているのにUnion型はユニオン型とカタカナです。

何でこういうことになるのでしょうか?

共用体派と集合派

基本的に、「共用体」を使う派と集合における「和集合」として訳す派に分かれます。

共用体

プログラミングのContextにおいて、Union型という名前で最も有名なものはC,C++におけるUnion型です。
これの訳語は共用体で固まっているので、これを当てたものと思われます。

共用体(きょうようたい、英: union)は、プログラミング言語におけるデータ型の一つで、同じメモリ領域を複数の型が共有する構造である。
例として、ある入力が数字の場合は数値として、そうでない場合は文字列のまま保持したいという場合を考える。この場合、数値用と文字列用の領域をそれぞれ用意するのが一つの解法だが、入力は数値か文字列のどちらか一方なので、片方しか使われず無駄が出る。そこで代わりに、格納用の領域を一つだけ用意して、これを数値である、文字列であると場合により解釈し分けることで領域の無駄が抑えられる。この「格納用の領域」こそが共用体である。1

Wikipediaから持ってきましたが、確かに似たような機能ではあります。
複数のデータ型を格納しうる値という点ではTypescriptのUnion型と同じです。
しかし、上記の説明を見ても分かるように、この「共用型」という訳語は「メモリ領域の共有」という点に着目されてつけられたものです。
javascriptにコンパイルされると飛んでしまうTypescriptの型情報にメモリ領域は関係ありませんし、そもそもjavascriptでエンジニアがわざわざメモリ領域を指定することもありません。
ちょっと違和感があります。

一方で、F#では、公式の和訳でTypescriptと似たようなデータ構造(discriminated union)に対し「判別共用体」の訳語を当てているという例もあります。

集合の文脈で考える

Intersection型とUnion型は密接な関係があるとされていますが、
intersection,unionの対比関係と言うと集合における共通部分和集合がまず出てきます。
実際、Intersection型にあてられている「交差」も共通部分を示す用語の一つです。

また、Typescriptの型を取りうるあらゆる値の全体に対する部分集合だと考えると、
Intersection,Union型のそれぞれの挙動はまさに集合におけるそれらの用語の意義と一致します。

基本的にはこちらの意味で考えた方が正しいと個人的には思います。

ただ、こちらの方の訳し方も(合併派、直和派、直和と言えるケースは厳密には限られる派など)今一つ統一できていない感があります。

結論として

F#の前例はありますが、共用体と訳すのは誤解を招くだけだと個人的には思います。
ただ、和集合の方もデファクトスタンダードな訳語がありませんし、共用体という訳語もそれなりに広まっているので、
union型とかユニオン型でお茶を濁しておくのが無難な気がします。
身もふたもない結論ですが。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2