¿QUIERES SABER QUÉ ACABA DE PASAR?
Hay algo que quizá no hayas advertido.
Álex nunca ejecutó alex.py.
Ni una sola vez.
Lo abrió. Lo leyó. Intentó entenderlo. Desconfió de él. Lo modificó. Lo guardó. Lo cerró.
Pero nunca lo ejecutó.
El archivo decía:
cafe = False
y el café no desapareció.
Álex decidió no tomarlo.
El archivo decía:
miedo = False
y Álex siguió sintiendo miedo.
El archivo terminó diciendo:
viaje = None
pero los billetes ya estaban comprados.
Python no hizo ninguna de esas cosas.
Álex sí.
Durante casi toda la historia parecía que estábamos intentando descubrir qué sabía alex.py sobre Álex.
Tal vez la pregunta estaba mal formulada.
Álex miraba unas instrucciones y decidía qué significaban.
Hasta que apareció:
> Tu turno.
Entonces Álex dejó de ser quien tenía una instrucción delante.
La tenías tú.
Y aquí ocurre la única diferencia que importa:
esa instrucción sí podía ejecutarse.
Quizá la ejecutaste inmediatamente.
Quizá antes quisiste saber qué hacía.
Quizá decidiste no ejecutarla.
Si estás leyendo esto, incluso es posible que hayas llegado hasta aquí por un camino que nosotros no habíamos previsto.
No importa.
No había una respuesta correcta escondida detrás del botón.
Había una decisión.
Tuya.
Y queda otra pequeña cosa.
Ese signo:
>
ha aparecido varias veces.
En informática puede formar parte de un prompt, la señal de que un sistema está preparado para recibir una entrada. No es una regla universal y no todos los terminales utilizan ese símbolo.
Aquí tampoco significaba exactamente eso.
Era solamente un espacio esperando algo al otro lado.
Al principio estaba Álex.
Ahora estás tú.
Si Quieres Saber Qué Hacía Realmente El Código
True y False son valores booleanos. El programa puede manejarlos perfectamente. El problema empieza cuando intentamos meter dentro de ellos cosas como estar despierto, tener miedo o ser feliz.
None representa ausencia de valor. No significa «todavía no lo sé» ni «quizá». Esa incertidumbre se la puso Álex.
def define una función y return devuelve un resultado. Por eso:
def continuar():
return True
def detenerse():
return False
no hace que nadie continúe ni se detenga. Solo devuelve dos valores.
Con:
recuerdos = []
Python crea una lista vacía.
Y:
recordar("primer_beso")
añade una cadena de caracteres.
No añade un beso.
Ni una tarde.
Ni una persona.
Ni aquello que Álex sintió.
Solo añade el texto "primer_beso".
Eso era precisamente lo inquietante: el programa podía almacenar el nombre de una experiencia sin contener la experiencia.
Luego apareció:
try:
vivir()
except Exception:
detenerse()
finally:
morir()
finally no significa «finalmente» en el sentido narrativo de «cuando llegue el final».
En Python, el bloque finally se ejecuta al abandonar la estructura try, haya ocurrido o no una excepción.
Si Álex hubiera ejecutado ese fragmento tal como estaba escrito, morir() habría cambiado una variable:
vivo = False
Nada más.
Álex puso dentro todo lo demás.
Y cuando escribió:
while vivo:
vivir()
creó algo curioso.
Mientras vivo continúe siendo True, el bucle seguirá llamando a vivir().
Pero vivir() no cambia vivo.
Así que, tal como está escrito, podría continuar indefinidamente.
Álex había intentado rebelarse contra el archivo.
Y terminó escribiendo un bucle.
También estaba:
pass
Es Python perfectamente válido.
Y no hace nada.
A veces no ejecutar ninguna acción también puede escribirse como una instrucción.
Queda la primera línea:
#!/usr/bin/env python3
Se llama shebang.
En sistemas tipo Unix puede indicar que el archivo debe interpretarse utilizando Python 3 localizado a través del entorno.
No es la forma habitual en que Windows PowerShell o CMD deciden ejecutar Python.
Pero como título tenía otra vida.
Desde la primera página decía, aproximadamente:
interpreta lo que viene después.
Y eso es exactamente lo que Álex hizo.
Y lo que tú acabas de hacer.
¿Y la última instrucción?
Aquella maraña:
wqFUZSBxdWllcm8hID4gU2lndWUgYXPDrQ==
era Base64.
No estaba cifrada.
Estaba codificada.
La instrucción de PowerShell convertía esa representación Base64 en bytes y después interpretaba esos bytes como texto UTF-8.
En el móvil ocurrió esencialmente lo mismo dentro del navegador.
El ordenador no descubrió ningún secreto.
Solo transformó unos datos.
El significado apareció después.
Como había ocurrido con casi todo lo demás.