Tipos de datos
Aquí tienes una explicación completa del concepto tipo de dato en español, enfocada en su definición, propósito y clasificación dentro de la programación.
Tipo de dato
Un tipo de dato es una propiedad que se le asigna a un valor o a una variable para indicarle al programa qué clase de información representa, cómo debe almacenarse en la memoria y qué operaciones se pueden realizar válidamente con ella.
En esencia, el tipo de dato define tres cosas:
- El conjunto de valores posibles que puede tomar (ej: solo números enteros, solo verdaderos/falso, etc.).
- La representación interna (cuántos bytes ocupa y cómo se interpretan esos bytes).
- Las operaciones permitidas (sumar, restar, concatenar, comparar, etc.).
¿Por qué son necesarios los tipos de datos?
Las computadoras trabajan únicamente con bits (0 y 1). Un tipo de dato le indica al compilador o intérprete cómo interpretar una secuencia de bits. Por ejemplo, la secuencia 01000001 podría ser:
- El número entero 65
- El carácter 'A' (en ASCII)
- Parte de un número decimal
- Una instrucción de máquina
El tipo de dato resuelve esta ambigüedad.
Clasificación de los tipos de datos
1. Tipos de datos primitivos (o básicos)
Son los que vienen incorporados en el lenguaje y no se pueden descomponer en otros más simples.
| Tipo | Descripción | Rango / Ejemplo | Tamaño típico |
|---|---|---|---|
| Entero (int) | Números sin parte decimal | -2³¹ a 2³¹-1 (32 bits) | 2-8 bytes |
| Real (float, double) | Números con parte decimal (coma flotante) | ±1.5×10⁻⁴⁵ a ±3.4×10³⁸ | 4-8 bytes |
| Carácter (char) | Un solo símbolo (letra, dígito, signo) | 'a', '5', '#' | 1 byte |
| Booleano (bool) | Valores de verdad | true / false (verdadero/falso) | 1 byte (normalmente) |
| Cadena (string) | Secuencia de caracteres (en algunos lenguajes es primitivo; en otros es un objeto) | "Hola mundo" | Variable |
2. Tipos de datos compuestos (o estructurados)
Se forman combinando tipos primitivos u otros compuestos.
| Tipo | Descripción | Ejemplo |
|---|---|---|
| Arreglos (array) | Colección ordenada de elementos del mismo tipo | [1, 2, 3, 4] |
| Registros (struct, record) | Agrupación de campos de diferentes tipos | {nombre: "Ana", edad: 25} |
| Listas | Secuencia dinámica (tamaño variable) | [10, 20, 30] |
| Conjuntos (set) | Colección de elementos únicos sin orden | {1, 2, 3} |
| Diccionarios / Mapas | Pares clave → valor | {"clave": "valor"} |
| Tuplas | Secuencia inmutable de elementos (pueden ser de distintos tipos) | (x, y, z) |
3. Tipos de datos por abstracción
- Tipos definidos por el usuario (UDT): El programador crea nuevos tipos a partir de los existentes (ej:
enum,struct,class). - Tipos abstractos de datos (TAD): Definen un comportamiento sin especificar implementación (ej: pila, cola, lista enlazada).
Tipado estático vs. tipado dinámico
| Característica | Tipado estático | Tipado dinámico |
|---|---|---|
| Cuándo se verifica | En tiempo de compilación | En tiempo de ejecución |
| Declaración de tipo | Obligatoria (ej: int edad;) |
Opcional o inferida |
| Flexibilidad | Menor (la variable no cambia de tipo) | Mayor (una variable puede cambiar de tipo) |
| Seguridad | Mayor (detecta errores antes de ejecutar) | Menor (pueden aparecer errores al correr) |
| Ejemplos de lenguajes | C, C++, Java, Go, Rust | Python, JavaScript, Ruby, PHP |
// Tipado estático (Java)
int numero = 10;
numero = "texto"; // ❌ Error de compilación: tipo incompatible
## Tipado dinámico (Python)
variable = 10 # int
variable = "texto" # str - ✅ Perfectamente válido
Conversión de tipos (casting)
Es la operación que permite transformar un valor de un tipo de dato a otro.
Conversión implícita (automática)
El lenguaje convierte automáticamente cuando no hay pérdida de información.
int entero = 5;
double real = entero; // 5.0 (implícita: int → double)
Conversión explícita (casting)
El programador fuerza la conversión, incluso si hay posible pérdida.
## Python
numero = 3.7
entero = int(numero) # 3 (pierde el .7)
// Java
double real = 3.14;
int entero = (int) real; // 3 (casting explícito)
Ejemplos prácticos en distintos lenguajes
## Python (tipado dinámico)
edad = 25 # int
nombre = "Carlos" # str
altura = 1.75 # float
es_mayor = True # bool
## Operaciones válidas según tipo
suma = edad + 10 # ✅ int + int
texto = nombre + " López" # ✅ str + str
## error = nombre + edad # ❌ TypeError: str + int
// Java (tipado estático)
public class Ejemplo {
public static void main(String[] args) {
int edad = 25; // Entero
String nombre = "Carlos"; // Cadena
double altura = 1.75; // Real
boolean esMayor = true; // Booleano
// Operaciones
int suma = edad + 10;
String saludo = nombre + " tiene " + edad + " años";
// error: int + boolean
// int resultado = edad + esMayor; // ❌
}
}
// JavaScript (tipado dinámico débil)
let valor = 10; // number
valor = "diez"; // string - cambió de tipo
let resultado = 10 + "5"; // "105" (conversión automática a string)
Tabla resumen: operaciones típicas por tipo
| Tipo de dato | Operaciones comunes |
|---|---|
| Entero | +, -, *, /, % (módulo), <, >, == |
| Real | +, -, *, /, pow (potencia), comparaciones |
| Booleano | && (y), || (o), ! (no), == |
| Carácter | Comparaciones (<, >), concatenación, conversión a entero |
| Cadena | + (concatenación), [] (índice), length, substring, comparaciones |
| Arreglo | [] (acceso por índice), length, búsqueda, ordenación |
Importancia de los tipos de dato
| Beneficio | Explicación |
|---|---|
| Seguridad | Previene operaciones sin sentido (dividir texto entre números) |
| Optimización | El compilador puede usar el tamaño justo de memoria |
| Documentación | El tipo comunica la intención del programador |
| Rendimiento | Las operaciones tipo-específicas son más rápidas |
| Mantenibilidad | Facilita entender y modificar código ajeno |
En resumen: El tipo de dato es una etiqueta que le indica a la computadora cómo interpretar un valor en memoria y qué operaciones puede realizar con él. Clasifican la información en categorías como enteros, reales, booleanos, cadenas o estructuras más complejas, y son fundamentales para escribir programas correctos, eficientes y fáciles de mantener.