Share to: share facebook share twitter share wa share telegram print page

 

Unión de datos

En programación, una unión 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 unión 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 sin tipado o en modo inseguro (como en C). Tienen la ventaja sobre las uniones etiquetadas por no necesitar espacio para guardar el tag.

El nombre "unión" 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 unión 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.

Unión en distintos lenguajes de programación

C/C++

En C y C++, las uniones son expresados casi igual que los struct excepto que cada miembro empieza en la misma dirección de memoria. Los elementos, al igual que en los structs, no necesitan ser valores simples, de hecho, pueden ser structs e incluso uniones. 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 estándar de C++ como miembro de una unión. El objeto unión 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 unión es el ahorro de espacio, ya que proporciona una manera de guardar varios tipos de datos en el mismo espacio. Las uniones 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 unión es normalmente determinado por el estado de otra variable, probablemente dentro de un struct.

Un uso común de las uniones en C es lo que en C++ se llama reinterpret_cast, asignando los datos a un elemento de la unión 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 uniones.


Pascal

El lenguaje de programación Pascal permite crear uniones de manera muy similar a la manera en que sea crean las estructuras (cambiando "Estruc" por "Union"). El principal uso de las uniones es para interpretar un valor de un tipo de dato en otro tipo de dato, por ejemplo interpretar los bytes de un valor flotante como un entero. En este ejemplo el valor flotante no es convertido a un entero, sino que los bytes que lo componen se interpretan como un entero. A diferencia de C/C++ las uniones en Pascal pueden contener cadenas de caracteres, al igual que estructuras y otras uniones.

Kembali kehalaman sebelumnya


Index: pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve 
Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9