Tipos de datos (A3C34B1D01)

¿Qué es un tipo de datos?

Un tipo de datos es una clasificación del propio dato que le indica al intérprete o compilador cómo tiene que procesar esos valores. Es decir, el tipo de datos determina qué valores puede tomar, el espacio de memoria asignado para almacenarlos y qué operaciones se pueden realizar con el dato al que acompaña. Dependiendo del tipo de valor que queremos asignar a una variable, utilizaremos un tipo de datos u otro. Por ejemplo, si una variable se define de tipo entero, sólo podrá almacenar números de tipo entero y realizar operaciones que permitan tipos enteros.

De forma general, podemos dividir los tipos de datos en dos grandes grupos: tipos de datos simples y tipo de datos complejos.

Tipos de datos simples

Los tipos de datos simples son aquellos que no pueden ser divididos en elementos más pequeños. En programación, se les conoce también como tipos de datos primitivos. Los tipos de datos primitivos son los tipos básicos ofrecidos por la mayoría de los lenguajes de programación. Los cinco tipos de datos primitivos son los siguientes:

  • Enteros: números enteros como -20, 0, o 1.000.000.
  • Coma flotante: números decimales como -3,51, 0,3 o 458,639636.
  • Valores lógicos o booleanos: valores lógicos que pueden ser verdadero o falso.
  • Caracteres: un único carácter, como por ejemplo ‘a’ o ‘r’.
  • Cadena de texto: cadenas formadas por uno o más caracteres, como por ejemplo “Hola mundo”.

Como hemos visto anteriormente, el tipo de datos condiciona las operaciones que se pueden realizar. La figura siguiente muestra un ejemplo de las operaciones en función del tipo de dato primitivo. Se trata tan sólo de un ejemplo que incluye las operaciones más comunes, ya que la lista completa depende del lenguaje de programación que se esté usando.

 EJEMPLO DE OPERACIONES EN FUNCIÓN DEL TIPO DE DATOS PRIMITIVO

Tipos de datos primitivos Operaciones
Enteros Adición, sustracción, multiplicación, división, módulo, raíz cuadrada, potencias
Coma flotante Adición, sustracción, multiplicación, división, redondeo, raíz cuadrada.
Booleanos NOT, AND, OR.
Caracteres Concatenación, comparación.
Cadenas de texto Concatenación, comparación, indexación, fragmentación, obtener acceso a una posición.

Como puedes ver, diferentes tipos de datos comparten el mismo tipo de operaciones, ¿eso significa que se pueden mezclar operadores de distinto tipo en una misma operación? La respuesta corta es “no”, pero en realidad depende de la operación y del lenguaje de programación utilizado.

Veamos un ejemplo. Supongamos que tenemos dos variables llamadas “operando1” y “operando2”. La primera de ellas es de tipo entero mientras que la segunda es de tipo coma flotante. ¿Qué ocurrirá si queremos sumarlas?

entero operando1 <- 5
coma_flotante operando2  <- 4.0
resultado <- operando1 + operando2

Como norma general, no se deben mezclar tipos de datos diferentes en una misma operación; si así sucediera, el compilador o intérprete arrojaría una excepción. Sin embargo, algunos lenguajes de programación lo permiten. Lo que ocurre en este caso es que internamente se realiza una conversión de un tipo de datos a otro tipo de datos. Entonces, podría ocurrir que el compilador transformara el operando de tipo entero a uno de tipo coma flotante, siendo el resultado de la suma de tipo coma flotante.

resultado = 9.0

Esto nos lleva a una funcionalidad muy utilizada, que ofrecen los lenguajes de programación con los tipos de datos primitivos: la conversión o casting. Se trata de un proceso por el que se modifica el valor de un tipo de datos para convertirlo a otro tipo de datos. En el caso del ejemplo anterior, se trata de una conversión implícita, ya que se realiza de forma automática. Por el contrario, la conversión explícita requiere que el programador indique el nuevo tipo de datos al que se va a convertir el original.

Supongamos que queremos realizar de nuevo una suma, en este caso de tipos de datos entero.

entero operando1 <- 20
entero operando2 <- 23
entero resultado <- operando1 + operando2

El resultado de la suma sería 43. Ahora queremos que los operandos y, por tanto, el resultado de la operación, sea de tipo de cadena, pero sin perder los datos originales (de tipo entero). La solución sería realizar una conversión de tipo de datos entero a tipo de datos cadena:

cadena operando1_cadena <- (cadena) operando1
cadena operando2_cadena <- (cadena) operando2
cadena resultado_cadena <- operando1_cadena + operando2_cadena

¿Cuál sería entonces el resultado?, ¿una cadena con valor 43? No, ya que la suma de cadenas no es una operación aritmética, en realidad se trata de una concatenación. Por lo tanto, el resultado sería un tipo de datos cadena con valor 2023.

Tipos de datos complejos

Los tipos de datos complejos son una herramienta poderosa en programación porque permiten almacenar y manipular datos de una manera más estructurada, flexible y eficiente. A diferencia de los tipos de datos simples, los valores de los tipos de datos complejos están formados por varios tipos primitivos.

Debido a su importancia en programación, la mayoría de los lenguajes de programación modernos proporcionan algunos tipos de datos complejos para que los programadores puedan representar y manipular estructuras de datos más complejas.

Sin embargo, los programadores también pueden crear sus propios tipos de datos complejos, según sus necesidades, para representar de manera más clara y significativa los datos de su programa.

A continuación, se describen algunos de los tipos de datos complejos más utilizados en programación.

Tipos enumerados

Los tipos de datos enumerados representan un conjunto finito de valores relacionados entre sí. Se trata de una forma de especificar un conjunto finito de valores con un orden en particular. Además, los tipos de datos enumerados ayudan a mejorar la claridad y la legibilidad del código, ya que proporcionan un contexto para los valores que se están utilizando.

Un ejemplo de uso de tipos de datos enumerados son los días de la semana. Para ellos se puede definir un tipo de dato “dia_semana” que incluya los siguientes valores: LUNES, MARTES, MIÉRCOLES, JUEVES, VIERNES, SÁBADO y DOMINGO. De esta forma, en lugar de tener que trabajar con números o cadenas para describir días específicos, el programador puede usar estas constantes específicas. Además, al ser un tipo de datos ordenado significa que cada uno de los días de la semana puede ser accedido por su ubicación en el enumerador, pudiendo recorrer en orden el enumerador o acceder a través de su posición al valor definido.

Estructuras de datos

Las estructuras de datos, al igual que los enumeradores, son un tipo de datos que facilitan la organización y estructuración de los datos de un programa. En el caso de los registros se trata de un tipo de datos mucho más complejo que los enumeradores. En general, una estructura es un conjunto de datos simples o complejos que se agrupan bajo un nombre común.

A grandes pinceladas, cada estructura tiene sus propias características. Las más relevantes son las siguientes:

  • Tipos de datos que lo forman:
    • Simples y/o complejos.
    • Homogéneos o heterogéneos.
  • Variación de su tamaño: estático o dinámico.
  • Orden de la estructura: lineal o no lineal.

Los lenguajes de programación incluyen un grupo de estructuras con características bien definidas que facilitan su uso al programador. Aunque cada lenguaje define las suyas propias, existen algunas comunes en la mayoría de los lenguajes de programación de alto nivel como son, por ejemplo, los, arrays.

 

Arrays unidimensionales: vectores

Los vectores son un tipo de estructura de datos que representan una colección lineal y estática de elementos homogéneos. Los vectores se utilizan para almacenar y acceder a múltiples valores en una sola estructura.

Por ejemplo, para implementar el juego del ahorcado podríamos utilizar un vector en el que se almacene por cada posición uno de los caracteres que forman la palabra que hay que adivinar.

 

Arrays bidimensionales: matrices

En programación, las matrices son un tipo de estructura de datos que representan una colección bidimensional de elementos homogéneos (todos del mismo tipo). Visualmente, las matrices se pueden representar como una tabla con filas y columnas. Cada elemento en la matriz se accede a través de dos índices numéricos, uno para la fila y uno para la columna.

El tablero de ajedrez podría ser representado a través de una matriz de 8 filas por 8 columnas. A cada fila y a cada columna se le asigna un número para poder identificarla de forma unívoca. De esta forma si queremos acceder a una casilla en concreto basta con indicar el número de fila y el número de columna en el que se encuentra.

En resumen, este documento ha abordado los tipos de datos en programación, dividiéndolos en tipos simples y complejos. Además, se ha discutido sobre la conversión de tipos y se ha introducido el concepto de estructuras de datos. Para obtener una visión más detallada de estas últimas, se recomienda la lectura del documento A3C34B1D03 “Estructuras de Datos Visión General y Clasificación”.

DOCUMENTO

ESTRUCTURAS DE DATOS VISIÓN GENERAL Y CLASIFICACIÓN

Documento referenciado: A3C34B1D03