共変性と反変性 (計算機科学)
(コンピュータプログラミングの型システムでの)共変性と反変性(きょうへんせいとはんぺんせい、covariance and contravariance)とは、データコンテナのサブタイプ関係が、そのデータ要素のサブタイプ関係に連動して定義されるという概念を指す。また、関数の型のサブタイプ関係での、引数型と返り値型の汎化特化の制約を定義する概念でもある。ジェネリックなデータ構造、関数の型、クラスのメソッド、ジェネリックなクラス、ジェネリック関数などに適用されている。
共変性と反変性は、圏論由来の用語である。この用語には以下の概念がある。
共変(covariant)は、派生 <: 基底 とすると、B <: A ならば I<B> <: I<A> になる。
反変(contravariant)は、共変のリバースであり、B <: A ならば I<A> <: I<B> になる。
双変(bivariant)は、互いに適用可能になり、B <: A ならば I<B> ≡ I<A> になる。
変性(variant)は、共変・反変・双変のどれかであることを指す。
非変(nonvariant)は、共変・反変・双変のどれでもないことを指す。