Conceptos Fundamentales

Variables, Constantes y Mutabilidad

Comparativa interactiva multilenguaje: C, JavaScript, Python y Java.

SLIDE 1 / 6

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).

Identificador: El nombre simbólico en tu código (ej. score).
Dirección: La ubicación física en RAM (ej. 0x7ffd9).
Valor: Los datos binarios almacenados internamente.
VISUALIZADOR DE RAM SIMULADO
0x7FFD01 score (int) 100
0x7FFD05 MAX_LIMIT (const) 999 🔒
0x7FFD09 user_name (string) "Facundo"

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.
main.c
#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: Variable con alcance de bloque.
const (Primitivo): Impedimento total de cambio.
const (Objeto): La referencia es fija, pero sus claves pueden mutar.
app.js
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).
script.py
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).

final: Evita reasignación de variable o puntero.
String: Clase inmutable por diseño (String Pool).
Main.java
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:

C / GCC Compiler
const float PI = 3.14159f; PI = 3.0f; // Intentando reasignar...
ERROR DE COMPILACIÓN

main.c:6:5: error: assignment of read-only variable 'PI'