- 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.
Este conteúdo é algo com o qual você se deparará naturalmente se for desenvolvedor de compiladores,
se utilizar as APIs de um compilador,
ou se utilizar excessivamente o sistema de tipos de um compilador.
É algo que naturalmente se integra em nossas vidas de codificação.
Simplesmente, se temos dois tipos, Animal e Dog,
se um Dog pode ser atribuído a um Animal,isso é chamado de covariânciae
inversamentese um Animal pode ser atribuído a um Dog,isso é chamado de contravariância.
Normalmente, você não pode atribuir um Animal a um Dog.
Isso porque, do ponto de vista de pessoas comuns, isso não é apropriado,
portanto, os desenvolvedores de compiladores levam isso em consideração eaplicama contravariância apenas em
algumas partes.
Normalmente, a contravariância é aplicada ao valor de entrada de uma função, enquanto a covariância é mantida no valor de saída.
Por que essa contravariância é necessária?Você pode se perguntar.
Isso ajuda a tornar o trabalho mais flexível e a manter o polimorfismo em áreas como o tratamento de eventos.
A covariância pode causar problemas em alguns casos.
No código acima, um Animal foi inserido no lugar de um Dog para garantir flexibilidade e permitir que o polimorfismo seja considerado.
Se, em vez de Animal, um subtipo de Dog como Chiwawa fosse inserido, um erro ocorreria ao executar o handler de eventos, pois Chiwawa pode ter interfaces que Dog não possui.
Na verdade, como o tipo será usado como Animal durante a execução da função, pode parecer que um Dog está sendo atribuído a um Animal.
Como tal, a contravariância é tipicamente usada para o valor de entrada.
Invariância e imutabilidade
Resumidamente, a invariância permite tanto covariância quanto contravariância, enquanto a imutabilidade não permite nenhuma das duas.
Conclusão
Este tópico pode ser simples ou complexo, dependendo do seu nível de entendimento,
Portanto, seria uma boa ideia dar uma olhada neste link.
Comentários0