En programació informàtica, la tipificació d'ànec és una aplicació de la prova de l'ànec — "Si camina com un ànec i gralla com un ànec, aleshores ha de ser un ànec" — per determinar si un objecte es pot utilitzar per a un propòsit concret. Amb la tipificació nominativa, un objecte és d'un tipus determinat si es declara com a tal (o si l'associació d'un tipus amb l'objecte es dedueix mitjançant mecanismes com l'herència d'objectes). Amb la tipificació d'ànecs, un objecte és d'un tipus determinat si té tots els mètodes i propietats requerits per aquest tipus. La tipificació d'ànecs es pot veure com una equivalència estructural basada en l'ús entre un objecte determinat i els requisits d'un tipus.
En llenguatges tipats estàticament En alguns llenguatges de tipus estàtic com ara Boo i D, es pot especificar que la comprovació de tipus de classe es produeixi en temps d'execució en lloc de en temps de compilació.
Comparació amb altres sistemes de tipus Sistemes de tipus estructural La tipificació d'ànec (duck typing) és similar, però diferent, a la tipificació estructural. La tipificació estructural és un sistema de tipificació estàtic que determina la compatibilitat i l'equivalència de tipus mitjançant l'estructura d'un tipus, mentre que la tipificació d'ànec és dinàmica i determina la compatibilitat de tipus només mitjançant la part de l'estructura d'un tipus a la qual s'accedeix durant el temps d'execució.
Els llenguatges TypeScript, Elm i Python admeten la tipificació estructural en diversos graus.
Protocols i interfícies Els protocols i les interfícies proporcionen una manera de declarar explícitament que alguns mètodes, operadors o comportaments s'han de definir. Si una biblioteca de tercers implementa una classe que no es pot modificar, un client no pot utilitzar una instància d'aquesta amb una interfície desconeguda per a aquesta biblioteca, fins i tot si la classe compleix els requisits de la interfície. Una solució comuna a aquest problema és el patró adaptador. En canvi, amb el tipus duck, l'objecte s'acceptaria directament sense necessitat d'un adaptador.
Plantilles o tipus genèrics Les funcions o mètodes de plantilla (també anomenats genèrics) apliquen la prova d'ànec en un context de tipificació estàtica; això aporta tots els avantatges i desavantatges de la comprovació de tipus estàtica enfront de la dinàmica. La tipificació d'ànec també pot ser més flexible, ja que només s'han d'implementar els mètodes que realment es criden en temps d'execució, mentre que les plantilles requereixen implementacions de tots els mètodes que no es pot demostrar que siguin inabastables en temps de compilació.
En llenguatges com Java, Scala i Objective-C, la reflexió es pot emprar per inspeccionar si els objectes implementen mètodes o afegeixen mètodes necessaris en temps d'execució. Per exemple, l'API MethodHandle de Java es pot utilitzar d'aquesta manera.
Referències
Categoria:Dades informàtiques