本文へスキップ

代数的データ型とは?

だいすうてきでーたがた

代数的データ型とは、複数のデータ型を「直積」や「直和」で組み合わせて新しい型を定義する、関数型プログラミングで広く使われる型システムの概念です。

代数的データ型(ADT:Algebraic Data Type)は、既存の型を組み合わせて新しいデータ型を構成する方法の総称です。「代数的」という名称は、集合論や代数構造における「直積(product)」と「直和(sum / coproduct)」の操作に由来します。

主な種類としては次の二つがあります。

  • 直積型(Product Type)複数のフィールドをすべて持つ型。タプルや構造体が典型例で、「AかつB」を表す。
  • 直和型(Sum Type / Tagged Union):複数の候補のうちいずれか一つをとる型。「AまたはB」を表し、列挙型の拡張と考えられる。

代数的データ型の大きな利点は、パターンマッチングと組み合わせることで、すべてのケースを網羅した安全なプログラムを書きやすくなる点にあります。コンパイラが未処理のケースを検出してくれるため、バグの混入を防ぐ効果があります。

Haskell・OCaml・Rust・Scala・Kotlinなどの言語でネイティブにサポートされており、Haskellではdataキーワード、Rustではenumとして定義します。TypeScriptでは判別ユニオン型(Discriminated Union)がこれに相当します。

関数型プログラミングにおいてデータ構造を型安全に表現する中核概念として、現代のプログラミング言語設計に大きな影響を与えています。

使い方・例文

Rustでenum Shape { Circle(f64), Rectangle(f64, f64) }のように定義し、match式で形状ごとの処理を網羅的に記述する場面で代数的データ型が使われます。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語