Variables y constantes: qué son, diferencias y ejemplos en código
En este artículo
Una variable es un espacio de memoria con nombre cuyo valor puede cambiar durante la ejecución del programa. Una constante es lo mismo, pero su valor no puede modificarse una vez asignado.
Esa es toda la diferencia conceptual. Lo que se complica —y donde se equivoca casi todo el mundo— es qué significa exactamente "no puede modificarse", porque no significa lo que parece.
La analogía que funciona
Imagina una caja con una etiqueta pegada.
La etiqueta es el nombre: edad, precio, usuario. El contenido es el valor. Una variable es una caja donde puedes sacar lo que hay y meter otra cosa. Una constante es una caja que se cierra con llave tras el primer uso.
Esta imagen sirve para empezar, pero tiene una limitación importante que veremos en el apartado sobre mutabilidad.
Cómo se declaran
| Lenguaje | Variable | Constante |
|---|---|---|
| JavaScript | let edad = 25; | const PI = 3.14; |
| Python | edad = 25 | PI = 3.14 (por convención) |
| Java | int edad = 25; | final int MAX = 100; |
| C / C++ | int edad = 25; | const int MAX = 100; |
| PHP | $edad = 25; | define('MAX', 100); |
| C# | int edad = 25; | const int MAX = 100; |
Python es un caso especial: no tiene constantes reales. Se usa la convención de escribir el nombre en mayúsculas para indicar que no debe modificarse, pero el lenguaje no lo impide. Es un acuerdo entre programadores, no una regla técnica.
Los tipos de dato que puede guardar
| Tipo | Guarda | Ejemplo |
|---|---|---|
| Entero | Números sin decimales | 42 |
| Decimal | Números con parte fraccionaria | 3.14 |
| Cadena | Texto | "Hola" |
| Booleano | Verdadero o falso | true |
| Array / lista | Colección de valores | [1, 2, 3] |
| Objeto | Conjunto de propiedades | {nombre: "Ana"} |
| Nulo | Ausencia de valor | null |
Los lenguajes se dividen en dos grupos según cómo tratan esto. En los de tipado estático (Java, C, C#) hay que declarar el tipo y no puede cambiar. En los de tipado dinámico (JavaScript, Python, PHP) el tipo se deduce solo y una misma variable puede cambiar de tipo.
Esa flexibilidad es cómoda y también peligrosa: una variable que empieza siendo un número y acaba siendo texto genera errores que solo aparecen en ejecución.
El malentendido de const: inmutable no es constante
Esta es la parte que hay que entender bien, porque provoca confusión incluso en gente con experiencia.
En JavaScript, const impide reasignar la variable, pero no impide modificar el contenido de lo que apunta:
const usuario = { nombre: "Ana" };
usuario.nombre = "Luis"; // ✅ Permitido: modificas el contenido
usuario = { nombre: "x" }; // ❌ Error: reasignas la variable
const lista = [1, 2, 3];
lista.push(4); // ✅ Permitido. Ahora lista es [1,2,3,4]
lista = [5, 6]; // ❌ Error
Volviendo a la analogía de la caja: const no cierra la caja con llave. Lo que hace es pegar la etiqueta de forma permanente a esa caja concreta. Puedes cambiar lo que hay dentro; lo que no puedes es despegar la etiqueta y ponérsela a otra caja.
Si necesitas que el contenido tampoco cambie, hace falta congelarlo explícitamente:
const config = Object.freeze({ idioma: "es" });
config.idioma = "en"; // no hace nada (o lanza error en modo estricto)
El alcance (scope): dónde vive cada variable
El alcance determina desde dónde se puede acceder a una variable. Los errores de alcance son de los más comunes al empezar.
let global = "visible en todo el archivo";
function ejemplo() {
let local = "solo dentro de esta función";
console.log(global); // ✅ funciona
}
console.log(local); // ❌ error: no está definida
En JavaScript, let y const respetan el bloque delimitado por llaves:
if (true) {
let x = 10;
var y = 20;
}
console.log(y); // 20 → var ignora el bloque
console.log(x); // ❌ error → let respeta el bloque
Por esto var está desaconsejado en código moderno: su comportamiento sorprende y genera errores difíciles de rastrear.
Regla práctica en JavaScript: usa const por defecto. Cambia a let solo cuando compruebes que necesitas reasignar. No uses var.
Puede parecer excesivo, pero tiene una ventaja concreta: al leer el código sabes de un vistazo qué valores van a cambiar y cuáles no.
Cómo nombrar bien
El nombre de una variable es documentación. Un nombre malo obliga a leer todo el código para entender qué contiene.
- Descriptivo:
totalConImpuestos, notnidato2. - Constantes en mayúsculas:
IVA,MAX_INTENTOS. Es convención universal. - Sin acentos ni eñes. Aunque el lenguaje los acepte, dan problemas de codificación.
- Los booleanos en forma de pregunta:
esValido,tienePermiso,estaActivo. - Sé consistente con la convención del lenguaje:
camelCaseen JavaScript y Java,snake_caseen Python y PHP.
Los números mágicos
Un valor suelto en medio del código sin explicación:
// mal
if (usuario.edad >= 18 && carrito.total > 50) {
aplicarDescuento(0.15);
}
// bien
const EDAD_MINIMA = 18;
const COMPRA_MINIMA_DESCUENTO = 50;
const DESCUENTO = 0.15;
if (usuario.edad >= EDAD_MINIMA && carrito.total > COMPRA_MINIMA_DESCUENTO) {
aplicarDescuento(DESCUENTO);
}
Además de leerse mejor, si mañana el descuento cambia al 20% se modifica en un solo sitio en lugar de buscar todos los 0.15 repartidos por el proyecto.
Variables y constantes en álgebra
El concepto viene de las matemáticas, aunque con un matiz distinto. En y = 3x + 5, la x y la y son variables porque pueden tomar distintos valores, mientras que el 3 y el 5 son constantes.
La diferencia con la programación: en matemáticas una variable representa un valor desconocido o que puede variar dentro de una relación, mientras que en programación es un espacio de almacenamiento que se puede sobrescribir. El símbolo = tampoco significa lo mismo: en matemáticas es una igualdad, en programación es una asignación.
Por eso una línea como x = x + 1, absurda en matemáticas, es perfectamente normal en código.
Errores frecuentes
Usar una variable antes de declararla. En algunos lenguajes da error; en otros devuelve un valor indefinido, que es peor porque el fallo aparece más adelante.
Reasignar una constante. Error inmediato en la mayoría de lenguajes.
Confundir el alcance. Declarar dentro de un bloque y usar fuera.
Reutilizar una variable para cosas distintas. Si temp guarda primero un nombre y luego un total, el código se vuelve ilegible. Cada variable, un propósito.
Comparar con un solo igual. En muchos lenguajes = asigna y == compara. Escribir if (x = 5) asigna en vez de comparar, y la condición siempre resulta verdadera.
Preguntas frecuentes
¿Cuál es la diferencia entre let y var?
let respeta el bloque donde se declara; var se comporta a nivel de función y puede redeclararse. Usa let.
¿Puedo cambiar el contenido de un array declarado con const?
Sí. const impide reasignar la variable, no modificar el objeto al que apunta.
¿Por qué Python no tiene constantes?
Por decisión de diseño: el lenguaje confía en la convención de los mayúsculas en vez de imponer la restricción.
¿Cuántas variables puedo declarar?
Las que quieras dentro de la memoria disponible. Lo que conviene limitar no es el número, sino el alcance: cuanto más local, mejor.
¿Aprendiendo a programar? En nuestro catálogo de cursos técnicos tienes formación desde cero, con acceso inmediato y de por vida.