¿Qué es sum type y product type en programación?.

En este post te voy a explicar que es un product type y un sum type en programación.

Primeros pasos

Los conceptos de sum type y product type no son exclusivos de la programación, ni tampoco de ningún paradigma. Estas ideas tienen su origen en las matemáticas, en la definición de funciones matemáticas para ser más exactos.

Cuando trabajas con argumentos de entrada de una función, puedes necesitar conocer todas las combinaciones posibles de valores de entrada. Por ejemplo, si tienes un método que recibe un Enum como argumento de entrada. Tienes un conjunto conocido de combinaciones con las que puedes trabajar, solo habrá más combinaciones si agregas más elementos al Enum. No hay posibilidad de tener mutaciones.

En el paradigma funcional, principalmente, esta capacidad de trabajar nada más con los elementos conocidos se vuelve valiosa. No siempre va a ser posible reducir los elementos de entrada a un único conjunto.

¿Qué es un sum type?.

Un sum type puede ser cualquier elemento de entrada al que se le conozcan todos sus posibles valores. Un booleano, por ejemplo, es un sum type porque tiene nada más dos valores conocidos: true y false. El tipo de dato byte también lo puedes considerar un sum type, ya que su rango es de -128 a 128 (en Scala). No hay posibilidad de que ninguno de estos dos tipos tengan mutaciones no esperadas.

Los ejemplos que te acabo de mencionar son fáciles de identificar, en escenarios más complejos, como cuando usas herencia, la obviedad de ver a un argumento como sum type desaparece. Por ejemplo, ¿qué pasa si tu método recibe una clase base con N número de posibles implementaciones?, ¿se podría considerar un sum type?. La respuesta para este escenario es relativa. Desde el punto de vista del cómputo, la respuesta es No; ya que el programa será incapaz de inferir todas las posibles mutaciones o variantes que podría tener el argumento. Si lo ves desde el punto de vista del diseño, donde construyes una serie de clases que tu sabes que no tendrán otras posibles variantes, bueno, podrías decir que el tipo es un sum type. Todo depende del lenguaje y las convenciones del proyecto.

¿Qué es un product type?

El product type es exactamente el mismo concepto que el sum type, solo que ahora, en vez de ver las posibles combinaciones de un argumento de función, tienes que ver todas las variantes de un número N de argumentos, o  las variantes de una tupla de argumentos, depende como lo visualices. Para que puedas hablar de un product type debes ser capaz de inferir todos los posibles estados de tus N argumentos, si al menos un parámetro de entrada no puede ser inferido. Ya no estaríamos hablando de un product type.

 

Conclusiones.

Los conceptos que acabo de explicarte son útiles, independientemente de la tecnología que trabajes. Si trabajas con un lenguaje que soporta pattern matching, entonces, deberías de estudiar más sobre estos. Esto te ayudará a reducir comportamientos no esperados.

 

 

 

 

 

Gustavo Sánchez
Últimas entradas de Gustavo Sánchez (ver todo)

Soy especialista en escribir software de calidad. Mediante el uso de marcos de trabajo, técnicas y automatización de procesos he podido reducir los costes operativos de los sistemas de la empresa. Sistemas confiables y adaptables producen clientes felices.