ジェネリクスはSwift言語における悩みの種となっている面白いトピックです。Generics Manifest では、Swift の型システムが定義よりも実践に重きを置いて作られたかについて素晴らしい説明がされています。ですが、「変性のダイヤモンド」という理論では、型システムの完全性とSwiftのジェネリクスがいかにこの理論にフィットしているかを別の視点で見ることができます。
このトークでは、Swiftにおける変性、共変性、反変性と、ダイヤモンドの上に輝く、Phantom Type について説明します。
変性のダイヤモンド
Mercari Souzoh で働いています
ターミナルツールを使って構築を楽しんでいました。
今日は変性というトピックです
タイプコンストラクトの間のサブタイプの関係性になります
AがBのサブタイプならF<A>
はF<B>
のサブタイプになる共変性
Arrayやオプショナルは共変性です。
反変性
ネストを増やして逆にしていける
Fが不変性であれば関係がない、Invarianceになる
お互い全く関係ない場合に
F<A>
が F<B>
に代入できる
サイヤ人とナメック人がZFighterに代入できる