5. Variables, constantes, parámetros y estado de un sistema

Para programar un modelo físico debemos saber qué datos cambian, cuáles se mantienen y cuáles pueden configurarse. Esta distinción hace que los programas sean más claros y fáciles de comprobar.

5.1 Los datos de un modelo no cumplen todos el mismo papel

En una simulación de movimiento aparecen números como posición, velocidad, duración, escala visual o aceleración. Aunque todos se almacenen en variables de JavaScript, no significan lo mismo ni deberían actualizarse de la misma manera.

Separar sus roles ayuda a leer el programa. Un dato que describe la posición actual no debe confundirse con una configuración elegida antes de iniciar la simulación. Esta organización también facilita repetir un experimento con nuevas condiciones.

Configuración: cómo queremos ejecutar el modelo.
Estado: cómo se encuentra el sistema en un instante.
Regla de actualización: cómo cambia el estado.

5.2 Variables en física y en programación

En física, una variable representa una magnitud cuyo valor puede variar: posición, temperatura o tiempo, por ejemplo. En programación, una variable es un nombre asociado a un valor. Ambas ideas se relacionan, pero no son idénticas.

Una variable de JavaScript puede guardar una magnitud física, una lista de mediciones o incluso una configuración de interfaz. Por eso conviene dar nombres que expresen significado y unidad: posicionM, velocidadMps y tiempoS.

let posicionM = 2;
const velocidadMps = 3;
const intervaloS = 0.5;

posicionM = posicionM + velocidadMps * intervaloS;
console.log(posicionM);

El resultado es 3,5. La posición cambia tras medio segundo según una velocidad de 3 m/s. La variable posicionM representa estado; las otras dos variables describen valores que este pequeño cálculo mantiene fijos.

5.3 Constantes del modelo

Una constante representa un valor que no cambia dentro del contexto definido. En JavaScript usamos const cuando no reasignaremos la referencia durante la ejecución. Eso previene cambios accidentales, pero no convierte automáticamente el dato en una constante universal de la naturaleza.

Por ejemplo, const pixelesPorMetro = 20 puede ser una constante para una vista concreta. Si el usuario cambia el zoom, ese valor puede pertenecer a la configuración de otra ejecución. Su papel físico o técnico depende del modelo.

ValorPuede mantenerse fijo enPuede cambiar entre
Aceleración elegidaUn ensayo con aceleración constante.Ensayos distintos.
Píxeles por metroUna visualización.Niveles de zoom o pantallas.
Masa de un objetoUn modelo sin transferencia de materia.Otro modelo o una medición actualizada.

5.4 Parámetros: valores que configuran una regla

Un parámetro permite reutilizar una función o un modelo con distintos valores. En una función, los parámetros son nombres que reciben datos de entrada. En un modelo, también llamamos parámetros a valores elegidos que influyen en una regla.

function posicionUniforme(posicionInicialM, velocidadMps, tiempoS) {
  return posicionInicialM + velocidadMps * tiempoS;
}

console.log(posicionUniforme(2, 3, 4));
console.log(posicionUniforme(-1, 0.5, 6));

Los resultados son 14 y 2. La relación es la misma; cambian las condiciones recibidas por la función. Los parámetros no tienen unidad propia: debemos acordar y documentar las unidades que espera la función.

5.5 El estado describe un instante

El estado es el conjunto mínimo de valores que necesitamos conocer en un instante para continuar el cálculo según nuestro modelo. Para un movimiento uniforme en una dimensión, puede bastar con posición y tiempo. Para un modelo con aceleración, normalmente también necesitaremos velocidad.

Representar el estado en un objeto agrupa valores que pertenecen al mismo sistema y evita listas de argumentos difíciles de leer.

const estado = {
  tiempoS: 0,
  posicionM: 2,
  velocidadMps: 3
};

console.log(estado);

Este objeto representa el estado inicial de un carrito. No indica por sí solo qué regla cambia sus propiedades; necesitamos agregar una función que defina la evolución.

5.6 Actualizar estado sin perder el anterior

Podemos modificar un objeto existente o crear uno nuevo. Para explicaciones y pruebas suele ser más claro devolver un nuevo estado: así conservamos el anterior y vemos con precisión qué calculó cada paso.

function avanzarUniforme(estado, intervaloS) {
  return {
    tiempoS: estado.tiempoS + intervaloS,
    posicionM: estado.posicionM + estado.velocidadMps * intervaloS,
    velocidadMps: estado.velocidadMps
  };
}

const inicial = { tiempoS: 0, posicionM: 2, velocidadMps: 3 };
const despuesDeUnSegundo = avanzarUniforme(inicial, 1);

console.log(inicial.posicionM);
console.log(despuesDeUnSegundo.posicionM);

Se muestran 2 y 5. La función no modifica inicial; construye un estado nuevo que contiene el resultado del paso.

5.7 Configuración y estado no son lo mismo

Una configuración puede incluir la posición inicial, la velocidad elegida y la duración. El estado actual cambia mientras se ejecuta la simulación. Ambos pueden contener números parecidos, pero responden preguntas diferentes.

const configuracion = {
  posicionInicialM: 2,
  velocidadMps: 3,
  duracionS: 4
};

let estado = { tiempoS: 0, posicionM: configuracion.posicionInicialM };
estado = { tiempoS: 1, posicionM: 5 };

console.log(configuracion.posicionInicialM);
console.log(estado.posicionM);

La configuración conserva 2 m como condición inicial. El estado se encuentra después en 5 m. Reiniciar una simulación normalmente crea un estado nuevo a partir de la configuración, no cambia la condición inicial guardada.

5.8 Laboratorio interactivo: inspeccionar el estado

Configurá un carrito que se mueve con velocidad constante. Los valores de posición inicial, velocidad y duración son parámetros de la ejecución. El tiempo, la posición y el desplazamiento forman parte del estado mostrado debajo.

Los datos del estado se muestran también debajo del gráfico.
● Turquesa: configuración actual● Amarillo: estado que cambia
Tiempo (estado)0,00 s
Posición (estado)2,00 m
Desplazamiento0,00 m

Configuración: x₀ = 2 m, v = 3 m/s, duración = 4 s

Estado: { tiempoS: 0,00, posicionM: 2,00 }

Estado inicial creado a partir de la configuración.

  • Modificá un parámetro: el estado vuelve a tiempo 0 porque comienza una ejecución nueva.
  • Mové solo el control de tiempo: la configuración se conserva y se calcula otro estado.
  • Usá «Reiniciar estado»: cambia tiempo, posición y desplazamiento; no cambia la configuración.
  • Con velocidad 0, el tiempo cambia pero la posición se conserva.

5.9 Ámbito y nombres claros

El ámbito indica dónde se puede usar un nombre. Una variable declarada dentro de una función puede evitar que un cálculo temporal se confunda con otro dato del programa. No es necesario repetir toda la fórmula en cada parte de la interfaz.

Los nombres largos pero específicos suelen ser preferibles a nombres como x, t o valor cuando el programa crece. En una fórmula breve pueden resultar cómodos; en una simulación completa conviene dejar claro qué representan.

Preferible: velocidadMps, intervaloS.
Ambiguo fuera de contexto: v, dt, dato.

5.10 Valores mutables y errores frecuentes

Si varios lugares del programa comparten el mismo objeto y uno lo modifica, todos observarán el cambio. Esto puede ser adecuado para un estado centralizado, pero conviene hacerlo de forma deliberada.

  • Confundir la condición inicial con la posición actual.
  • Reutilizar una variable para una magnitud con otra unidad.
  • Actualizar una velocidad que el modelo había declarado constante.
  • Cambiar la configuración al pausar cuando solo debería cambiar el estado.
  • Perder el estado anterior antes de poder comprobar un cálculo.

Podemos evitar muchos errores al tratar la configuración como lectura y al hacer explícitas las funciones que crean el siguiente estado.

5.11 Ejercicio propuesto

Representá un robot que comienza en −1 m y avanza con velocidad constante de 2 m/s. Construí una configuración para 3 s, un estado inicial y una función que devuelva el estado después de 0,5 s.

  1. Indicá qué valores son configuración y cuáles son estado.
  2. Calculá la posición después de un paso de 0,5 s.
  3. Aplicá seis pasos y compará el resultado con la posición a los 3 s.
Ver solución y código

La configuración contiene posición inicial, velocidad y duración. El estado contiene, como mínimo, tiempo y posición. Después de 0,5 s, el robot está en 0 m. Después de seis pasos llega a 5 m, igual que al calcular −1 m + 2 m/s × 3 s.

const configuracion = { posicionInicialM: -1, velocidadMps: 2, duracionS: 3 };
let estado = { tiempoS: 0, posicionM: configuracion.posicionInicialM };

function avanzar(estadoAnterior, intervaloS) {
  return {
    tiempoS: estadoAnterior.tiempoS + intervaloS,
    posicionM: estadoAnterior.posicionM + configuracion.velocidadMps * intervaloS
  };
}

for (let paso = 0; paso < 6; paso++) estado = avanzar(estado, 0.5);
console.log(estado);

5.12 Ideas para recordar

  • Las variables almacenan valores; sus nombres deben expresar significado y unidades.
  • Una constante de JavaScript evita reasignaciones, pero su interpretación depende del modelo.
  • Los parámetros configuran una regla o una ejecución.
  • El estado describe el sistema en un instante y cambia al evolucionar.
  • Separar configuración, estado y reglas de actualización facilita probar y reiniciar una simulación.

En el próximo tema veremos cómo transformar un problema físico en un algoritmo: datos de entrada, reglas, resultados y comprobaciones.