Variables y tipos de datos: dónde guarda todo un programa
Un programa es datos que se mueven
En la entrega anterior de la serie de Fundamentos de programación aprendimos a pensar como un programador: descomponer un problema en pasos. Hoy bajamos al primer ladrillo del código de verdad, y es el más básico de todos: dónde guarda un programa la información con la que trabaja.
Porque al final, todo programa hace lo mismo: coge unos datos, los manipula y devuelve otros. El nombre que escribe el usuario, el precio de un producto, si una casilla está marcada o no. Todo eso son datos, y para trabajar con ellos hay que guardarlos en algún sitio primero. Ese sitio es la variable.
Qué es una variable
Una variable es una caja con nombre donde guardas un valor para usarlo después. Nada más. Le pones una etiqueta, metes algo dentro, y cada vez que nombras la etiqueta, el programa va a la caja y coge lo que hay.
En pseudocódigo:
edad = 35
nombre = "Marcos"
Acabas de crear dos variables. Una se llama edad y guarda el número 35. Otra se llama nombre y guarda el texto “Marcos”. A partir de aquí, cuando escribas edad, el programa entiende 35.
El signo = aquí no es el “igual” de las matemáticas. Es una asignación: significa “mete el valor de la derecha en la caja de la izquierda”. Esto es importante, porque permite algo que en matemáticas sería absurdo:
contador = 5
contador = contador + 1
En mates, contador = contador + 1 no tiene sentido. En programación se lee de derecha a izquierda: “coge lo que hay en contador (5), súmale 1 (da 6) y vuelve a meterlo en contador”. Ahora contador vale 6. Se llaman variables justo por eso: su valor varía a lo largo del programa.
Constantes: lo que no cambia
A veces tienes un valor que no debe cambiar nunca: el número pi, el IVA, el nombre de tu empresa. Para eso están las constantes. Son como variables, pero una vez les pones un valor, queda bloqueado. Si más adelante intentas cambiarlo, el programa se queja.
CONSTANTE IVA = 0.21
¿Por qué molestarse? Por seguridad y por claridad. Si algo no debería cambiar, declararlo constante evita que lo cambies por accidente en otra parte del programa. Es una red de protección que te pones tú mismo. Una buena regla para empezar: si un valor no necesita cambiar, hazlo constante.
Los tipos de datos básicos
No todos los datos son iguales. Un número no se trata como un texto, y un “sí/no” no se trata como un número. A la clase de dato que guarda una variable se le llama tipo. Estos son los que vas a usar el 95% del tiempo:
- Entero (integer): números sin decimales.
35,-7,1000. Para contar cosas, edades, cantidades. - Decimal (float): números con coma.
3.14,19.99,-0.5. Para precios, medidas, porcentajes. Ojo: en programación el separador decimal es el punto, no la coma. - Booleano (boolean): solo dos valores posibles, verdadero o falso (
true/false). Es la lógica de sí o no que vimos en la entrega anterior. Para “¿está activo?”, “¿es mayor de edad?”. - Cadena de texto (string): texto, entre comillas.
"Hola","marcos@correo.com","Calle Mayor, 3". Cualquier secuencia de caracteres. Fíjate en que"35"entre comillas es texto, no el número 35. - Nulo (null): la ausencia de valor. No es cero, no es texto vacío: es “aquí no hay nada todavía”. Útil para decir “esta variable existe, pero aún no le hemos puesto contenido”.
Con estos cinco tipos te defiendes en casi cualquier programa sencillo. El resto de tipos que existen se construyen, en el fondo, combinando estos.
La trampa: cuando 2 + 2 da “22”
Aquí viene uno de los primeros sustos del principiante. Mira esto:
a = 2
b = 2
resultado = a + b // resultado vale 4
x = "2"
y = "2"
resultado = x + y // resultado vale "22"
¿Por qué? Porque 2 (entero) y "2" (cadena de texto) son tipos distintos. Con números, el + suma. Con texto, el + suele concatenar, es decir, pega un texto detrás del otro. Para la máquina, “2” + “2” es como “casa” + “perro”: junta los caracteres y devuelve “casaperro”, o en este caso “22”.
Este es el clásico error que confunde a todo el que empieza, y el motivo de fondo es no tener claro el tipo de cada variable. Por eso conviene saber siempre qué tipo de dato tienes entre manos.
Tipado estático vs dinámico
Los lenguajes se reparten en dos bandos según cómo gestionan los tipos, y conviene saberlo porque cambia bastante la experiencia de programar:
- Tipado estático: declaras el tipo de cada variable al crearla, y no puede cambiar. Si dices que
edades un entero, edad será un entero para siempre. Lenguajes como Java, C++ o TypeScript funcionan así. Es más estricto y más verboso, pero pilla muchos errores antes de ejecutar. - Tipado dinámico: no declaras el tipo, el lenguaje lo adivina solo según lo que metes, y una misma variable puede pasar de guardar un número a guardar un texto. Python y JavaScript son así. Es más cómodo y rápido de escribir, pero también más fácil de meter la pata con los tipos, justo como el “22” de antes.
Ninguno es mejor que el otro en absoluto. Son dos filosofías, y cada lenguaje elige la suya.
Casting: convertir un tipo en otro
Como los tipos a veces chocan, todos los lenguajes te dejan convertir un dato de un tipo a otro. Se llama casting o conversión de tipos. Si tienes el texto "35" y necesitas operar con él como número, lo conviertes:
texto = "35"
numero = entero(texto) // ahora numero vale 35, como entero
suma = numero + 5 // da 40, no "355"
Esto pasa muchísimo en el mundo real, porque casi todo lo que escribe un usuario en una pantalla llega como texto, aunque sea un número. Lo primero que haces es convertirlo al tipo correcto. Quédate con la idea: cuando algo no opera como esperas, sospecha del tipo y conviértelo.
Lo siguiente: operar con los datos
Ya sabes guardar información (variables), de qué clase es (tipos) y cómo pasar de una clase a otra (casting). Lo que falta es hacer cosas con esos datos: sumarlos, compararlos, combinarlos.
De eso va la próxima entrega: los operadores, las herramientas con las que un programa opera de verdad con sus variables. Ahí veremos por qué confundir = con == es el error que comete absolutamente todo el mundo al empezar.
Preguntas frecuentes
¿Cuál es la diferencia entre una variable y una constante?
Una variable guarda un valor que puede cambiar a lo largo del programa: la reasignas cuando quieres. Una constante guarda un valor que se fija al crearla y no se puede modificar después. Se usan constantes para valores que no deben cambiar nunca (el IVA, pi, un identificador fijo), como red de protección frente a cambios accidentales.
¿Por qué 2 + 2 a veces da 22 en programación?
Porque depende del tipo de dato. Si los dos valores son números enteros, el operador + los suma y da 4. Si son cadenas de texto (van entre comillas, como “2”), el + las concatena, es decir, pega una detrás de otra y da “22”. El error de fondo casi siempre es no tener claro si una variable guarda un número o un texto.
¿Qué significa el tipado estático y dinámico?
En el tipado estático declaras el tipo de cada variable y no puede cambiar (Java, C++, TypeScript): más estricto, pilla errores antes. En el tipado dinámico el lenguaje deduce el tipo solo y una variable puede cambiar de tipo (Python, JavaScript): más cómodo de escribir, pero más fácil de equivocarse con los tipos. Ninguno es mejor, son dos enfoques distintos.
El libro para esta entrega
Cuando quieras ver todo esto (variables, tipos, conversiones) en un lenguaje real y desde cero, mi recomendación es Curso intensivo de Python, de Eric Matthes. Empieza justo por aquí, por guardar datos, y te lleva de la mano hasta hacer proyectos de verdad. Es de los mejores para tu primer lenguaje.
Este artículo contiene enlaces de afiliado.
Compártelo si te ha resultado útil.
¿Cuál de los cinco tipos de datos te ha sorprendido más, o cuál no acababas de entender? Cuéntame y lo aclaro.
Y… en la próxima entrega, a operar.
Artículos relacionados
Pensar como un programador: descomponer problemas y lógica
Antes de escribir una sola línea de código hay que aprender lo más importante de todo: a pensar como un programador. Y eso no va de memorizar sintaxis, va de coger un problema grande y partirlo en pasos tan pequeños y tan claros que una máquina tonta pueda ejecutarlos sin equivocarse. En esta primera entrega de la serie de Fundamentos te explico qué es de verdad programar, cómo descomponer cualquier problema (con el ejemplo de hacerte un café), qué son el pseudocódigo y los diagramas de flujo, cómo funciona la lógica de verdadero y falso, y qué es eso de la abstracción. Si dominas esto, la sintaxis luego es un paseo.
Aprende a programar desde cero: la serie de Fundamentos
Acabamos de pasar el verano ordenando el dinero, y una de las conclusiones fue clara: no basta con recortar, hay que ganar más. Pues aquí va una de las habilidades que mejor se paga y que cualquiera puede empezar a aprender gratis: programar. Arranco una serie de ocho entregas, los lunes, miércoles y viernes, para llevarte desde el cero absoluto (qué es pensar como un programador) hasta que entiendas variables, operadores, condicionales, bucles, funciones, estructuras de datos y cómo cazar tus propios errores. Es lenguaje-agnóstico, con pseudocódigo y ejemplos cortos, pensada para principiantes de verdad. Y hay un motivo extra para hacerlo ahora: con la Inteligencia Artificial escribiendo código, saber estos fundamentos es justo lo que separa a quien dirige a la máquina de quien le reza. Este post es el índice y el calendario.
Programar con Inteligencia Artificial: ella escribe, yo pienso
La Inteligencia Artificial escribe código más deprisa que yo, y no tiene sentido competir con eso. Lo que hago es usar ese tiempo para lo que ella no hace bien: leer lo que escribe, revisarlo y centrarme en la arquitectura del software. Esta es mi forma de programar con Inteligencia Artificial, bastante distinta de la que se lleva ahora, y por qué sigo leyendo y escribiendo código.