Una variable vincula un nombre con un valor y un tipo define operaciones válidas. Entender esa separación evita mezclar representación, significado y mutabilidad.
7 min de lectura3 bloques para tocar
Una variable no es una caja mágica ni necesariamente una dirección de memoria. Es un nombre
que, dentro de cierto contexto, está vinculado a un valor. El tipo dice qué significa ese
valor y qué operaciones tienen sentido.
Valores y nombres
Números, booleanos y textos son valores. Una declaración introduce un nombre:
La expresión de la derecha se evalúa y su resultado se vincula al nombre de la izquierda.
const impide reasignar ese vínculo; no vuelve inmutable todo objeto que pueda haber detrás.
Dos declaraciones. A la izquierda el nombre, a la derecha lo que quedó vinculado a él.
1 / 5
La flecha es lo que const congela, y la caja del otro lado no. Por eso el número no se puede tocar y el objeto sí: no son dos reglas distintas, es la misma regla sobre dos cosas distintas.
Antes de seguir, predecí
Un tipo son valores y operaciones
Un tipo reúne valores posibles y operaciones permitidas. Sumar números, concatenar texto y
comparar booleanos son operaciones distintas aunque algún lenguaje reutilice símbolos.
El chequeo estático detecta incompatibilidades antes de ejecutar; el dinámico las resuelve
durante la ejecución. La inferencia permite que un sistema estático deduzca tipos sin escribirlos
en cada línea.
Precedencia, y por qué los paréntesis
Una expresión produce un valor. La precedencia decide cómo se agrupan operadores, pero los
paréntesis hacen explícita la intención:
promedio=cantidadsuma.
También importa el dominio. Dividir por cero, exceder el rango de un entero o mezclar unidades
puede producir error aunque la sintaxis sea válida. El tipo ayuda, pero no reemplaza las
precondiciones del negocio.
Compuestos: dos nombres, un objeto
Arreglos, registros y objetos agrupan valores. Dos variables pueden referir al mismo objeto;
mutarlo a través de una vuelve visible el cambio desde la otra. En cambio, reasignar una
variable no cambia la otra referencia.
Esta diferencia explica muchos efectos inesperados. Antes de modificar una estructura hay
que saber si es compartida, si debe copiarse y qué parte del programa puede observarla.
Tres expresiones que no dicen lo que parecen
// 1. El orden de evaluación decide el resultadolet index = 0;const values = [10, 20, 30];const picked = values[index++] + values[index++]; // 10 + 20 = 30, y index quedó en 2// 2. La división entera no existe en todos ladosconst average = 7 / 2; // 3.5 en JavaScript, 3 en Python 2 y en C con enterosconst integerPart = Math.trunc(7 / 2); // 3, y dicho explícitamente// 3. Los decimales no son exactosconst sum = 0.1 + 0.2; // 0.30000000000000004const isThird = sum === 0.3; // false
Las tres tienen el mismo origen: la expresión se lee como matemática y se ejecuta como una
secuencia de operaciones sobre representaciones concretas. La primera depende de cuándo se
incrementa el índice; la segunda, de qué tipo tienen los operandos; la tercera, de que 0,1 no se
puede escribir exacto en base dos.
Lo que se decide al declarar
const
let
var
Se puede reasignar
no
sí
sí
Alcance
el bloque
el bloque
la función entera
Antes de la declaración
error
error
undefined, en silencio
Cuándo usarla
siempre, por defecto
cuando el valor cambia de verdad
nunca
La tercera fila es la que hace de var un problema y no una preferencia: usar una variable antes de declararla no falla, devuelve undefined, y el error aparece mucho más lejos.
La regla práctica es corta: const por defecto, let sólo cuando el valor se reasigna de
verdad, y var nunca. No es una convención estética. Un const le dice a quien lee —y al
compilador— que ese nombre va a significar lo mismo en toda la función, y eso es una cosa menos
que hay que seguir mentalmente al leer.
Lo que preguntan sobre esto
Cierre
Los nombres hacen legible el estado, los tipos delimitan operaciones y las expresiones crean
nuevos valores. Separar vínculo, valor y representación permite razonar sobre mutabilidad,
errores y contratos sin depender de una metáfora incompleta.