Union (programación)

Union (programación)

En programación, una union es un valor que puede poseer varias representaciones o formatos; o una Estructura_de_datos que consiste en una variable que puede almacenar dicho valor. Algunos lenguajes de programación admiten tipos de datos especiales, llamados union types, para describir dichos valores y variables.

Dependiendo del lenguaje y del tipo, un valor union puede ser usado en operaciones como, por ejemplo, asignación o comparación de igualdad, sin necesidad de saber su tipo específico. Por el contrario, otras operaciones si que requieren saber el tipo de dato — ya sea por medio de información externa, o por el uso de un tagged union.


A causa de sus limitaciones de uso, las uniones son normalmente proveídas en lenguajes untyped o en modo inseguro (como en C). Tienen la ventaja sobre tagged unions por no necesitar espacio para guardar el tag.

El nombre "union" proviene de la definición formal de type. Si uno mira el type como el Conjunto de todos los valores que ese type puede ser, un union type es simplemente la Unión de conjuntos de los types que lo constituyen, puesto que es capaz de almacenar cualquier valor que puedan sus elementos. Además, puesto que la unión matemática evita los duplicados, si más de un campo puede almacenar un valor común, es imposible decir, a partir del valor, qué campo fue el último en ser escrito.

Unions en varios lenguajes de programación

C/C++

En C y C++, los untagged unions son expresados casi igual que los struct excepto que cada miembro empieza en la misma dirección de memoria. Los elementos, en los structs, no necesitan ser valores simples, de hecho, pueden ser structs e incluso unions. Por otra parte, C++ no permite a un elemento ser de cualquier tipo que tenga un full fledged constructor/destructor y/o copy constructor, o una copia no-trivial del operador de asignación. En particular, es imposible tener cadenas de caracteres estandar de C++ como miembro de una union. El objeto union ocupa tanto espacio como el elemento más grande que lo compone, mientras que los structs necesitan al menos el mismo espacio que la suma de los tamaños de todos sus elementos. Esta ganancia en espacio, muy útil en algunos casos, implica un gran coste en seguridad: la lógica del programa debe asegurarse de que solo se lee el último elemento en ser escrito por todos los posibles caminos que lleve el programa al ejecutarse.

La principal ventaja de la union es el ahorro de espacio, ya que proporciona una manera de guardar varios tipos de datos en el mismo espacio. Las unions proporcionan también polimorfismo. Pero, no se comprueba el tipo de los datos, así que es tarea del programador asegurarse que se accede correctamente en todos los posibles contextos. El elemento más relevante de la variable union es normalmente determinado por el estado de otra variable, probablemente dentro de un struct.

Un uso común de las unions en C es lo que en C++ se llama reinterpret_cast, asignando los datos a un elemento de la union y leyendo de otro, para códigos que dependen de la representación cruda de los valores. Aunque esta no es una forma segura de usar las unions.

Structure and union specifiers have the same form. [ . . . ] The size of a union is sufficient to contain the largest of its members. The value of at most one of the members can be stored in a union object at any time. A pointer to a union object, suitably converted, points to each of its members (or if a member is a bit-field, then to the unit in which it resides), and vice versa.
ANSI/ISO 9899:1990 (the ANSI C standard) Section 6.5.2.1

Wikimedia foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Mira otros diccionarios:

  • Unión Europea de Radiodifusión — European Broadcasting Union Union européenne de radio télévision Tipo Unión de organizaciones de radiodifusión Fundación …   Wikipedia Español

  • Programación lineal — Saltar a navegación, búsqueda La Programación Lineal es un procedimiento o algoritmo matemático mediante el cual se resuelve un problema indeterminado, formulado a través de ecuaciones lineales, optimizando la función objetivo, también lineal.… …   Wikipedia Español

  • Programación Orientada a Aspectos — Saltar a navegación, búsqueda La Programación Orientada a Aspectos (POA) es un paradigma de programación relativamente reciente cuya intención es permitir una adecuada modularización de las aplicaciones y posibilitar una mejor separación de… …   Wikipedia Español

  • Unión Latina — Bandera …   Wikipedia Español

  • Unión de Radiodifusión del Asia-Pacífico — La Unión de Radiodifusión del Asia Pacifico (ABU, en inglés) es una asociación sin fines de lucro, fundada en 1964, que reúne a los distintos entes de radiodifusión tanto de Asia como de Oceanía, llegando a una audiencia potencial de cerca de 3… …   Wikipedia Español

  • Circuito Unión Radio — Unión Radio Medios C.A. Lema Todo el tiempo, en todas partes Tipo Privada Fundación 1981 Sede …   Wikipedia Español

  • Lenguaje de programación C — Saltar a navegación, búsqueda C Paradigma: Imperativo (Procedural) Apareció en: 1972 Diseñado por: Dennis M. Ritchie Tipo de dato: Débil, Estático Implementaciones …   Wikipedia Español

  • C (lenguaje de programación) — Para el libro, véase El lenguaje de programación C. Para otros usos de este término, véase C (desambiguación). C Desarrollador(es) Dennis Ritchie y Bell Labs Información general …   Wikipedia Español

  • Wikipedia:Artículos destacados/Programación — Esta página está en una vitrina del museo de Wikipedia. Por favor, no la edites; ya no se usa. Atajo …   Wikipedia Español

  • Presupuesto de la Unión Europea — Saltar a navegación, búsqueda El presupuesto de la Unión Europea contiene todos los ingresos y todos los gastos de la UE. Si bien ha ido aumentando a lo largo del tiempo, actualmente su límite está fijado en el 1,27% del PIB de la Unión. El… …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”