- 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.
Ez a tartalom akkor válik relevánssá, ha Ön fordítófejlesztő, ha a fordító API-ját használja, vagy ha túlzottan használja a fordító típusrendszerét.
Természetesen találkozni fog vele.
Ha túl sokat használja a fordító típusrendszerét, akkor is találkozni fog vele.
És természetesen beépül a kódolási életünkbe.
Egyszerűen fogalmazva, ha két típusunk van, az Animal és a Dog,
ha egy Animal-nak Dog-ot rendelünk,kovarianciárólbeszélünk,
ellentétbenha egy Dog-nak Animal-t rendelünk,kontravariánsrólbeszélünk.
Általában nem lehet Dog-nak Animal-t rendelni.
Mivel ez a hétköznapi ember szemszögéből nem elfogadható,
ezért a fordítófejlesztők figyelembe veszik ezt, és csakbizonyos részekrekontravariánciát alkalmaznak.
Általában a kontravariáns viselkedést a függvények bemeneti értékeire alkalmazzák, míg a kimeneti értékekre a kovariáns viselkedést tartják meg.
És miért van szükség erre a kontravariáns viselkedésre?gondolhatja.
Ez az eseménykezeléshez hasonló helyzetekben segít rugalmasabb és polimorfabb működést biztosítani.
Sőt, a kovariáns viselkedés problémákat is okozhat.
A fenti kód a Dog helyett Animal-t használ, így rugalmasságot biztosít és lehetővé teszi a polimorfizmus figyelembe vételét.
Ha a Dog helyett egy Chiwawa-t (a Dog alosztályát) használnánk, akkor az eseménykezelő futtatásakor hiba lépne fel, mivel a Dog-ban nincs Chiwawa-specifikus interfész.
Sőt, ha az Animal típusú változót használjuk a függvény futtatásakor, akkor az Animal alosztályait automatikusan elfogadja.
Ez hasonló érzést kelthet, mintha Animal-nak Dog-ot rendeltünk volna.
Így a kontravariáns viselkedést általában a bemeneti értékekre alkalmazzák.
Invariáns és invariáns
Röviden: az invariáns típusok egyszerre kovariánsak és kontravariánsak, míg az invariáns típusok egyik sem.
Összegzés
Ez a tartalom egyszerű is lehet, és bonyolult is lehet, ezért
javasoljuk, hogy olvassa el ezt a cikket is.
Hozzászólások0