Reverse Generics

Updated
Jun 2, 2022 6:46 PM
Created
Jun 2, 2022 6:45 PM
Tags
Attributes

プロトコルとリバースジェネリクス

本章では、制約としてプロトコルを用いることで、 値型 中心のコードにおいてもパフォーマンスを損ねずにコードを抽象化できることを見てきました。しかし、 Swift の誕生から時間が経過し、様々なユースケースが生じる中で、制約としてのプロトコルによるコード抽象化に欠けているものが明らかになってきました。 そのような問題と解決策について Core Team の Joe Groff さんがまとめたドキュメントが "Improving the UI of generics" です。このドキュメントの中で リバースジェネリクス という新しい概念が説明され、その簡易形である Opaque Result Type が Swift 5.1 で部分的に導入されました。 本節では、制約としてのプロトコルと リバースジェネリクス および Opaque Result Type の関係を説明し、プロトコルを使ったコード抽象化の全体像を示します。 前節 まで見てきたように、 Swift にとっては制約としてのプロトコルが適しています。実際、 Swift の標準ライブラリでも制約としてのプロトコルが広く使われており、ほとんどすべてのプロトコルが制約として使用されています。 興味深いことに、 Kotlin では同様の目的でインタフェース( Swift のプロトコルのような役割を果たすもの)が iterator メソッド( Swift の makeIterator

プロトコルとリバースジェネリクス