Programación Declarativa: SQL y HCL
Aprende el paradigma declarativo: describe lo que quieres, no cómo obtenerlo — usando SQL y HCL
Programación Declarativa: SQL y HCL
Cada paradigma de programación que has visto hasta ahora es imperativo: escribes instrucciones paso a paso describiendo exactamente cómo lograr un resultado. La programación declarativa invierte esto: describes el resultado deseado, y el sistema descubre cómo llegar allí.
Imperativo vs Declarativo
Imperativo (cómo):
// Paso a paso: cómo encontrar usuarios mayores de 18
let resultado = [];
for (let i = 0; i < usuarios.length; i++) {
if (usuarios[i].edad >= 18) {
resultado.push(usuarios[i]);
}
}Declarativo (qué):
-- Describe lo que quieres, no cómo
SELECT * FROM usuarios WHERE edad >= 18;No le dices a la base de datos cómo iterar, filtrar o recolectar resultados. Simplemente declaras lo que necesitas.
SQL: Structured Query Language
SQL es el lenguaje declarativo más utilizado. Te permite consultar, insertar, actualizar y eliminar datos en bases de datos relacionales.
SELECT — Recuperando Datos
SELECT nombre, edad FROM usuarios;Esto devuelve las columnas nombre y edad para cada fila en la tabla usuarios.
WHERE — Filtrando Filas
SELECT * FROM productos
WHERE precio < 50 AND categoria = 'Electrónicos';ORDER BY — Ordenando
SELECT nombre, salario FROM empleados
ORDER BY salario DESC;JOIN — Combinando Tablas
Los datos a menudo están dispersos en múltiples tablas. JOIN las conecta:
SELECT pedidos.id, clientes.nombre, pedidos.total
FROM pedidos
JOIN clientes ON pedidos.cliente_id = clientes.id
WHERE pedidos.total > 100;Esta consulta responde: "¿Qué clientes hicieron pedidos de más de $100 y cuáles fueron los montos?" — sin escribir un solo bucle.
INSERT, UPDATE, DELETE
-- Agregar un nuevo registro
INSERT INTO usuarios (nombre, email) VALUES ('Ana', 'ana@ejemplo.com');
-- Actualizar registros existentes
UPDATE usuarios SET edad = 31 WHERE nombre = 'Ana';
-- Eliminar registros
DELETE FROM usuarios WHERE edad < 18;SQL es declarativa a nivel de sentencia, pero detrás de escena el motor de la base de datos crea un plan de ejecución — decide la mejor forma de ejecutar tu consulta.
HCL: HashiCorp Configuration Language
HCL es utilizado por Terraform, una herramienta para gestionar infraestructura como código. Declaras qué infraestructura deseas, y Terraform la crea.
Ejemplo con Terraform
# Declarar una instancia EC2 de AWS
resource "aws_instance" "servidor_web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "ServidorWeb"
}
}Esto define una máquina virtual: la AMI (imagen), el tamaño de la instancia y las etiquetas. No escribes código para llamar APIs de nube, manejar errores o verificar estado — Terraform se encarga de todo eso.
Variables y Salidas
variable "region" {
description = "Región AWS"
default = "us-east-1"
}
resource "aws_instance" "servidor" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = var.tipo_instancia
}
output "ip_publico" {
value = aws_instance.servidor.public_ip
}La Ventaja Declarativa
Con Terraform, tu configuración de infraestructura es:
- Versionada — almacenada en Git junto con tu código
- Reproducible — misma configuración produce misma infraestructura
- Autodocumentada — el archivo de configuración describe exactamente lo que existe
- Idempotente — ejecutarlo de nuevo no hace cambios si nada está desactualizado
Ejercicio Práctico
Escribe consultas SQL para una base de datos de tienda online:
-- 1. Encontrar todos los productos menores a $50
SELECT nombre, precio FROM productos WHERE precio < 50;
-- 2. Listar pedidos realizados en 2024 con nombres de clientes
SELECT clientes.nombre, pedidos.fecha, pedidos.total
FROM pedidos
JOIN clientes ON pedidos.cliente_id = clientes.id
WHERE pedidos.fecha >= '2024-01-01' AND pedidos.fecha < '2025-01-01'
ORDER BY pedidos.total DESC;
-- 3. Mostrar cuántos productos hay en cada categoría
SELECT categoria, COUNT(*) AS cantidad_productos
FROM productos
GROUP BY categoria
ORDER BY cantidad_productos DESC;Resumen
| Concepto | Imperativo | Declarativo |
|---|---|---|
| Enfoque | Cómo hacerlo | Qué obtener |
| Ejemplo SQL | Bucle + filtro | SELECT ... WHERE |
| Infraestructura | Llamadas API + scripts | resource "tipo" "nombre" { } |
| Beneficio clave | Control total | Simplicidad, legibilidad, idempotencia |
Próximos Pasos
Has completado el curso. Aprendiste los fundamentos de la programación — variables, funciones, flujo de control y estructuras de datos — y exploraste tres paradigmas principales: funcional (Python), compilado (Rust) y declarativo (SQL/HCL). ¡Sigue practicando y construyendo!