seegongsik
Mis palabras
Programación

Dónde viven los valores y a qué apuntan los nombres: memoria y referencias

Mientras un programa corre, cada valor que hacemos tiene que vivir en algún sitio. Ese sitio es la memoria. Imagina una larga pared de casilleros numerados. Un nombre es una nota que apunta a uno de esos casilleros.

01

Cada valor vive en algún sitio

Durante todo el tiempo que un programa corre,
cada valor ocupa un sitio en algún lugar de la memoria.
La memoria es como una pared con casilleros numerados.
Haz un valor y se mete en una casilla vacía.
El programa recuerda un valor por 'qué número de casilla'.

casilla 1
casilla 2
casilla 3
casilla 4
casilla 5

Pulsa 'guardar un valor'. Entra en una casilla vacía y ves el número de casilla.

Cada valor tiene su casilla y su número.
Pero en el código no escribimos 'casilla 7', ¿verdad?
Escribimos nombres como 'a', 'puntuación'.
¿Cómo se conecta ese nombre con un número de casilla?

02

Un nombre apunta a una casilla

Un nombre no es el valor en sí.
Es una nota que sabe 'qué casilla'.
Nombre 'a' -> casilla 3 -> el 7 de dentro.
Así que al usar 'a', el programa sigue la nota,
abre la casilla 3 y lee 7. Esto es 'apuntar'.

a
casilla 3
7

Toca el nombre 'a'. Sigue la nota hasta la casilla y saca el valor.

El nombre apunta a una casilla, y el valor está dentro de esa casilla.
Esta 'nota que apunta' se llama referencia.
Ahora, de aquí en adelante es lo que de verdad importa.
Si dices 'dale a a b también', ¿qué pasa?

03

Un valor pequeño se copia

Da un valor pequeño como un número a b,
y ese valor se duplica en una casilla nueva.
Ahora a es la casilla 3, b es la 5. Casillas distintas.
Así que aunque cambies a a 9, b sigue siendo 7.
Los dos son independientes, cada uno con su propio valor.

a
casilla 3
7

Pulsa 'copiar a b' y luego 'cambiar a'. b es otra casilla, así que no cambia.

Los valores pequeños copiados no se afectan. Limpio.
Pero una cosa grande como un objeto es otra historia.
Duplicar una cosa grande entera es pesado.
Así que, a menudo, en vez de copiar, ocurre otra cosa.

04

Las cosas grandes comparten una casilla

Al dar un objeto a b, en vez de duplicar el objeto entero,
a menudo se hace que b apunte a la misma casilla.
Ahora a y b, dos notas, apuntan juntas a una casilla.
Así que si cambias ese objeto a través de a,
mirar por b muestra el mismo cambio. Una cosa con dos nombres.

a
casilla 4
objeto: 1

Pulsa 'b = a' y luego 'cambiar por a'. Misma casilla, así que b también muestra el cambio.

Dos nombres apuntando a una casilla: cambiar uno cambia ambos.
Es lo que más sorprende al aprender por primera vez.
'¿Por qué cambió b si nunca lo toqué?'
Ahora sabes la respuesta: apuntaban a la misma casilla.

05

Sabe qué apunta a dónde y se acaba la confusión

La confusión siempre se reduce a una cosa.
¿El nombre tiene su propia copia, o comparte un puntero a una cosa?
Valor pequeño: es copia, así que se separan.
Cosa grande: apuntan a una casilla, así que se mueven juntos.
Solo recuerda esta distinción y las sorpresas desaparecen.

Elige 'valor pequeño' o 'cosa grande' y haz lo mismo. Mira cómo se separan los resultados.

Hasta aquí, esta es la base de la programación.
Desde un solo valor, agrupamos, repetimos y nombramos,
reunimos en objetos, arreglamos depurando, y dejamos que una máquina lo ejecute.
Y ahora hemos visto dónde vive todo eso
y a qué apuntan los nombres. Ya tienes una base sólida.

En una líneaUn valor vive en una casilla de memoria (una dirección), y un nombre es una nota que apunta a esa casilla. Da un valor pequeño a otro nombre y se copia en una casilla nueva, así son independientes; pero una cosa grande (un objeto) suele tener ambos nombres apuntando a la misma casilla, así que cambiar uno cambia el otro. Saber quién apunta a qué disuelve la confusión.
Programación
¿Te fue útil? Apoyar seegongsik