Saltar al contenido principal

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:

  1. El conjunto de valores posibles que puede tomar (ej: solo números enteros, solo verdaderos/falso, etc.).
  2. La representación interna (cuántos bytes ocupa y cómo se interpretan esos bytes).
  3. 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.