本文へスキップ

名前的部分型とは?

なまえてきぶぶんがた

名前的部分型とは、型の互換性を型の名前や宣言によって決定する型システムの方式のことです。

名前的部分型(Nominal Subtyping)とは、ある型が別の型のサブタイプであるかどうかを、型の名前や明示的な宣言(継承・実装宣言)によって判定する型システムの考え方です。「名義的型付け」とも呼ばれます。

名前的部分型では、たとえ二つのクラスがまったく同じフィールドとメソッドを持っていても、一方が他方をextendsimplementsで明示的に宣言していなければ互換性がないとみなされます。JavaやC#、Swift(一部)が典型的な名前的部分型の言語です。

これに対して、型の構造(持つフィールドやメソッドのシグネチャ)が同一であれば互換とみなす方式を構造的部分型(Structural Subtyping)と呼びます。TypeScriptやGoがこちらを採用しています。

名前的部分型の利点と欠点を整理すると、

  • (利点)意図しない型の混同を防ぎ、型定義の意味論を保護できる
  • (利点)「同じ構造でも異なる概念」を型レベルで区別できる(例:IDとカウンタが同じintでも混同しない)
  • (欠点)サードパーティのクラスを既存インターフェースに適合させるには、ラッパーや継承が必要になる
  • (欠点)ボイラープレートが増えがちである

名前的部分型は大規模なエンタープライズ開発で型の意味を厳密に管理したい場面に適しており、型安全性を最優先とする設計思想と相性がよいです。

使い方・例文

Javaでは、同じメソッドを持つ二つのクラスAとBがあっても、BがAをextendsまたはimplementsしていなければ、Aを期待するメソッドにBのインスタンスを渡せません。これが名前的部分型の典型的な挙動です。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語