Sunrabbit

Covariância e Contravariância

  • Idioma de escrita: Coreana
  • País de referência: Todos os paísescountry-flag
  • TI

Criado: 2024-11-01

Criado: 2024-11-01 01:06

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