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 componentesyson el conjunto de todos los valores posibles de ese tipo, el tipo de producto escritocontiene elementos que son pares, dóndeyson ejemplos deyrespectivamente. El tipo de par es un caso especial del tipo de par dependiente , donde el tipopuede depender de la instancia seleccionada.
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 (un-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 productoEstá 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(expresadatuple<Ts...>usando plantillas variádicas ), [ 1 ] y para el caso específico de dos elementos definestd::pair(expresadopair<T, U>). [ 2 ]std::tuplepuede 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), usaTuple<T1, T2>. [ 3 ] Para crear una tupla con nueve o más componentes, el parámetro finalTRestdeTuple<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 claseSystem.Collections.Generic.KeyValuePair(expresadaKeyValuePair<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(expresadoPair<K, V>). [ 8 ] Para iterar sobre contenedores asociativos comojava.util.Map, un par en el mapa se expresa comoMap.Entry<K, V>. [ 9 ] - Kotlin no tiene un tipo de tupla general, pero tiene clases
kotlin.Pair(expresadoPair<A, B>) [ 10 ] ykotlin.Triple(expresadoTriple<A, B, C>). [ 11 ] - Python tiene una
tuplecolección que se puede anotar comotyping.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 comoscala.Tuple2(expresado comoTuple2[A, B]) [ 15 ] ascala.Tuple22(expresado comoTuple22[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 .
- ↑ "std::tuple" . cppreference.com . Consultado el 14 de octubre de 2025 .
- ↑ "std::pair" . cppreference.com . Consultado el 14 de octubre de 2025 .
- ↑ "Clase Tuple" . learn.microsoft.com . Microsoft Learn . Consultado el 14 de octubre de 2025 .
- ↑ "Clase Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>" . learn.microsoft.com . Microsoft Learn . Consultado el 14 de octubre de 2025 .
- ↑ "KeyValuePair<TKey, TValue> struct" . learn.microsoft.com . Microsoft Learn . Consultado el 14 de octubre de 2025 .
- ↑ "Go efectivo - Funciones - Múltiples valores de retorno" . go.dev . Consultado el 14 de octubre de 2025 .
- ↑ "Data.Tuple" . hackage.haskell.org . Consultado el 14 de octubre de 2025 .
- ↑ "Class Pair<K, V>" . download.java.net . Oracle Corporation . Consultado el 14 de octubre de 2025 .
- ↑ "Mapa de interfaz.Entrada<K, V>" . docs.oracle.com . Oracle Corporation . Consultado el 14 de octubre de 2025 .
- ↑ "Pair" . kotlinlang.org . JetBrains sro . Consultado el 14 de octubre de 2025 .
- ↑ "Triple" . kotlinlang.org . JetBrains sro . Consultado el 14 de octubre de 2025 .
- ↑ "5. Estructuras de datos" . docs.python.org . Consultado el 14 de octubre de 2025 .
- ↑ "tupla - Rust" . doc.rust-lang.org . Consultado el 14 de octubre de 2025 .
- ↑ "Tupla" . www.scala-lang.org . Consultado el 14 de octubre de 2025 .
- ↑ "Tuple2" . www.scala-lang.org . Consultado el 14 de octubre de 2025 .
- ↑ "Tuple22" . www.scala-lang.org . Consultado el 14 de octubre de 2025 .
- ↑ "Documentación de tipos" . docs.swift.org . Apple Inc. Consultado el 14 de octubre de 2025 .
- Tipos de datos
- teoría de tipos
- Tipos de datos compuestos