- Covariance and contravariance (computer science)
- Many programming language type systems support subtyping. For instance, if the type Cat is a subtype of Animal, then an expression of type Cat should be substitutable wherever an expression of type Animal is used.
Данное описание встречается, если вы разработчик компилятора,
используете API компилятора,
или чрезмерно используете систему типов компилятора
Это то, с чем вы естественно сталкиваетесь.
И это естественным образом интегрируется в нашу жизнь кодирования
Вкратце, если есть два типа Animal и Dog,
если Dog присваивается Animal, этоковариантностьи
наоборотесли Animal присваивается Dog, этоконтравариантность.
Обычно Animal не может быть присвоен Dog.
Потому что с точки зрения обычных людей это нецелесообразно,
поэтому разработчики компиляторов учитывают это ив некоторых частяхдобавляют контравариантность
Обычно контравариантность используется для входных значений функции, а ковариантность поддерживается для выходных значений.
Зачем нужна эта контравариантность?— можете подумать.
Это помогает работать более гибко и поддерживать полиморфизм в таких областях, как обработка событий.
В случае ковариантности могут возникнуть проблемы.
В этом коде мы обеспечили гибкость, заменив Dog на Animal, и позволили обратить внимание на полиморфизм.
Если бы вместо Animal использовался подтип Dog, например, Chiwawa, при вызове обработчика событий возникла бы ошибка из-за отсутствия в Dog интерфейса, уникального для Chiwawa.
На самом деле, поскольку мы будем использовать тип Animal при вызове функции, можно просто сказать: "Подставьте любой подтип Animal при вызове".
Это может показаться похожим на присвоение Dog к Animal.
Таким образом, контравариантность обычно используется для входных значений.
Изменчивость, неизменность
Вкратце, изменчивость — это и ковариантность, и контравариантность, а неизменность — это ни то, ни другое.
В заключение
Это простое и в то же время сложное понятие,
поэтому советую вам почитать это.
Комментарии0