Variables, Constantes y Mutabilidad
Comparativa interactiva multilenguaje: C, JavaScript, Python y Java.
1. Memoria, Identificadores y Valores
Toda variable o constante es una posición en la memoria RAM que guarda un valor bajo un nombre asignado (identificador).
2. C: Tipado Estático y Asignación Directa
En C se declara el tipo exacto de dato antes de usar la variable. El compilador reserva un espacio en bytes fijo.
- int / float: Variables modificables en cualquier momento.
- const: Instrucción al compilador para prohibir reasignaciones.
#include <stdio.h>
int main() {
int contador = 0; // Variable mutable
const float PI = 3.14159f; // Constante inmutable
contador = 10; // OK: Cambia valor
// PI = 3.0; // Error de compilación GCC
return 0;
} 3. JavaScript: var, let, const & Referencias
JS usa tipado dinámico. const evita reasignar la variable, pero NO congela las propiedades de un objeto.
let edad = 25;
edad = 26; // OK
const config = { tema: 'oscuro' };
config.tema = 'claro'; // ¡Mutación permitida!
// config = {}; // TypeError en V8
Object.freeze(config); // Inmutabilidad real 4. Python: Nombres como Referencias a Objetos
En Python todo es un objeto. Las variables no contienen datos, sino etiquetas (referencias) a objetos en el Heap.
- Inmutables: int, float, str, tuple (create new object on change).
- Mutables: list, dict, set (modify in-place).
- typing.Final: Aviso para verificadores estáticos (Mypy).
from typing import Final
MAX_USERS: Final[int] = 500
numeros = [1, 2, 3]
numeros.append(4) # Mutación in-place en Heap
texto = "Hola"
# texto[0] = "h" # TypeError: str es inmutable 5. Java: Primitivos, Objetos y final
Java distingue estrictamente entre tipos primitivos (guardados por valor) y objetos (guardados por referencia en el Heap).
public class Main {
public static void main(String[] args) {
final double IVA = 0.21;
// IVA = 0.15; // Error de compilador javac
final StringBuilder sb = new StringBuilder("Hi");
sb.append(" World"); // OK: Contenido muta
}
} 6. Simulador Interactivo de Mutación
Seleccioná un lenguaje e intentá forzar una mutación inválida:
main.c:6:5: error: assignment of read-only variable 'PI'