Articulo de referencia

Tipo de producto

En lenguajes de programación y teoría de tipos , un producto de tipos es otro tipo compuesto en una estructura. Los operandos del producto son tipos , y la estructura de un tipo...

En lenguajes de programación y teoría de tipos , un producto de tipos es otro tipo compuesto en una estructura. Los operandos del producto son tipos , y la estructura de un tipo producto está determinada por el orden fijo de los operandos en el producto. Una instancia de un tipo producto conserva el orden fijo, pero puede contener todas las instancias posibles de sus tipos de datos primitivos . La expresión de una instancia de un tipo producto será una tupla , y se denomina "tipo de tupla" de expresión. Un producto de tipos es un producto directo de dos o más tipos.

Si solo hay dos tipos de componentes, se puede llamar un "tipo de par". Por ejemplo, si hay dos tipos de componentesA{\displaystyle A}yB{\displaystyle B}son el conjunto de todos los valores posibles de ese tipo, el tipo de producto escritoA×B{\displaystyle A\times B}contiene elementos que son pares(a,b){\displaystyle (a,b)}, dóndea{\displaystyle a}yb{\displaystyle b}son ejemplos deA{\displaystyle A}yB{\displaystyle B}respectivamente. El tipo de par es un caso especial del tipo de par dependiente , donde el tipoB{\displaystyle B}puede depender de la instancia seleccionadaA{\displaystyle A}.

En muchos lenguajes, los tipos de producto adoptan la forma de un tipo de registro , para el cual se puede acceder a los componentes de una tupla mediante una etiqueta . En lenguajes que tienen tipos de datos algebraicos , como en la mayoría de los lenguajes de programación funcional , los tipos de datos algebraicos con un constructor son isomorfos a un tipo de producto.

En la correspondencia de Curry-Howard , los tipos de productos se asocian con la conjunción lógica ( AND ) en lógica .

La noción se extiende directamente al producto de un número arbitrario finito de tipos (unnorte{\displaystyle n}-ario tipo producto), y en este caso, caracteriza las expresiones que se comportan como tuplas de expresiones de los tipos correspondientes. Una forma degenerada de tipo producto es el tipo unidad : es el producto de ningún tipo .

En los lenguajes de programación que pasan por valor , un tipo producto puede interpretarse como un conjunto de pares cuyo primer componente es un valor del primer tipo y cuyo segundo componente es un valor del segundo tipo. En resumen, se trata de un producto cartesiano y corresponde a un producto en la categoría de tipos.

La mayoría de los lenguajes de programación funcional tienen una noción primitiva de tipo de producto. Por ejemplo, el productoT1×T2×...×Tnorte{\displaystyle T_{1}\times T_{2}\times ...\times T_{n}}Está escrito en ML y en Haskell . En ambos lenguajes, las tuplas se escriben y sus componentes se extraen mediante coincidencia de patrones . Además, muchos lenguajes de programación funcional proporcionan tipos de datos algebraicos más generales , que extienden tanto los tipos producto como los tipos suma . Los tipos producto son el dual de los tipos suma.T1 * T2 * ... * Tn(T1, T2, ..., Tn)(v1, v2, ..., vn)

Tipos de productos en lenguajes de programación

  • C++ define la clase std::tuple(expresada tuple<Ts...>usando plantillas variádicas ), [ 1 ] y para el caso específico de dos elementos define std::pair(expresado pair<T, U>). [ 2 ]std::tuple puede estar vacío ( tuple<>).
  • C# / .NET Framework define la clase System.Tuple. Hay instanciaciones específicas para 1 a 8 elementos. Para el caso específico de dos elementos (un par), usa Tuple<T1, T2>. [ 3 ] Para crear una tupla con nueve o más componentes, el parámetro final TRestde Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>se proporciona como otra tupla. [ 4 ] Para iterar sobre colecciones como tipos de diccionario, se proporciona la clase System.Collections.Generic.KeyValuePair(expresada KeyValuePair<TKey, TValue>). [ 5 ]
  • Go no tiene un tipo de tupla, pero puede expresar múltiples valores de retorno en una función como una especie de tupla. [ 6 ]
  • Haskell tiene un tipo de datos Data.Tuple. [ 7 ]
  • Java no tiene un tipo de tupla general, pero JavaFX tiene un tipo javafx.util.Pair(expresado Pair<K, V>). [ 8 ] Para iterar sobre contenedores asociativos como java.util.Map, un par en el mapa se expresa como Map.Entry<K, V>. [ 9 ]
  • Kotlin no tiene un tipo de tupla general, pero tiene clases kotlin.Pair(expresado Pair<A, B>) [ 10 ] y kotlin.Triple(expresado Triple<A, B, C>). [ 11 ]
  • Python tiene una tuplecolección que se puede anotar como typing.Tuple(expresada ). [ 12 ]Tuple[T1, T2, ..., TN]
  • Rust define el tipo de tupla primitiva, expresado como , y un par es simplemente . [ 13 ](T1, T2, ..., TN)(T, U)
  • Scala define la clase scala.Tuple, [ 14 ] que admite entre 2 y 22 objetos como scala.Tuple2(expresado como Tuple2[A, B]) [ 15 ] a scala.Tuple22(expresado como Tuple22[A, B, ..., V]). [ 16 ]
  • Swift expresa las tuplas como . [ 17 ](T1, T2, ..., TN)

Véase también

Referencias

  • tipo de producto en el laboratorio n
  • Teoría de tipos homotópicos: Fundamentos univalentes de las matemáticas , Programa de Fundamentos Univalentes, Instituto de Estudios Avanzados . Véase la sección 1.5 .
  1. "std::tuple" . cppreference.com . Consultado el 14 de octubre de 2025 .
  2. "std::pair" . cppreference.com . Consultado el 14 de octubre de 2025 .
  3. "Clase Tuple" . learn.microsoft.com . Microsoft Learn . Consultado el 14 de octubre de 2025 .
  4. "Clase Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>" . learn.microsoft.com . Microsoft Learn . Consultado el 14 de octubre de 2025 .
  5. "KeyValuePair<TKey, TValue> struct" . learn.microsoft.com . Microsoft Learn . Consultado el 14 de octubre de 2025 .
  6. "Go efectivo - Funciones - Múltiples valores de retorno" . go.dev . Consultado el 14 de octubre de 2025 .
  7. "Data.Tuple" . hackage.haskell.org . Consultado el 14 de octubre de 2025 .
  8. "Class Pair<K, V>" . download.java.net . Oracle Corporation . Consultado el 14 de octubre de 2025 .
  9. "Mapa de interfaz.Entrada<K, V>" . docs.oracle.com . Oracle Corporation . Consultado el 14 de octubre de 2025 .
  10. "Pair" . kotlinlang.org . JetBrains sro . Consultado el 14 de octubre de 2025 .
  11. "Triple" . kotlinlang.org . JetBrains sro . Consultado el 14 de octubre de 2025 .
  12. "5. Estructuras de datos" . docs.python.org . Consultado el 14 de octubre de 2025 .
  13. "tupla - Rust" . doc.rust-lang.org . Consultado el 14 de octubre de 2025 .
  14. "Tupla" . www.scala-lang.org . Consultado el 14 de octubre de 2025 .
  15. "Tuple2" . www.scala-lang.org . Consultado el 14 de octubre de 2025 .
  16. "Tuple22" . www.scala-lang.org . Consultado el 14 de octubre de 2025 .
  17. "Documentación de tipos" . docs.swift.org . Apple Inc. Consultado el 14 de octubre de 2025 .