En Elixir, las expresiones primitivas son la base para trabajar con datos simples, como los números. Por ejemplo, el número 15 es una expresión primitiva que se evalúa a sí misma, al igual que 5, 25 o 100. Lo interesante es que, a diferencia de otros lenguajes, Elixir permite manejar números tan largos como queramos sin redondeos ni notación científica. Esto nos libera de preocupaciones comunes en lenguajes como Java o C, donde trabajar con números muy grandes requiere librerías especiales o trucos adicionales.
Pero no solo existen números; Elixir maneja muchos tipos de datos que iremos explorando más adelante. Por ahora, centrémonos en otro tipo de expresión fundamental: las asignaciones. Aunque en Elixir las asignaciones no funcionan exactamente como en otros lenguajes, su propósito es claro: asignar nombres a expresiones para facilitar su uso y mejorar la legibilidad del código.
Imaginemos que queremos usar el número pi en nuestros programas. En lugar de escribir 3.14159 una y otra vez, podemos asignarle un identificador, que es simplemente un nombre que elegimos para referirnos a esa expresión. Esto es muy parecido a cómo en matemáticas usamos la letra griega π para representar esa constante, o en física usamos letras para constantes como la gravedad o la constante de Planck.
Para hacer esta asignación en Elixir, primero elegimos un identificador, que debe comenzar con una letra y puede contener números después. Por ejemplo, podemos usar pi como identificador. Luego, escribimos el signo igual y la expresión que queremos asociar, como 3.14159263. Es importante recordar que, aunque en español usamos la coma para separar decimales, en programación se utiliza el punto, siguiendo la notación anglosajona.
pi = 3.14159263
Al ejecutar esta asignación, Elixir nos devuelve el valor asignado, lo que indica que la asociación se ha realizado correctamente. A partir de ese momento, cuando escribamos pi, Elixir lo evaluará como 3.14159263, gracias a que internamente mantiene una tabla que relaciona identificadores con sus expresiones correspondientes.
Si intentamos usar un identificador que no hemos definido, Elixir nos avisará de que no está definido, lo que nos ayuda a evitar errores por nombres mal escritos o no inicializados.
Podemos asignar otros identificadores, como x = 5, y luego usarlos en nuestras expresiones. En el intérprete interactivo, incluso podemos reasignar valores cómodamente, por ejemplo, cambiar x de 5 a 7. Sin embargo, cuando escribimos programas reales en archivos, Elixir nos exige que las asignaciones sean inmutables: una vez que asignamos un valor a un identificador, este no puede cambiar.
Esta inmutabilidad puede parecer contradictoria con la palabra variable, que implica cambio, pero es una característica fundamental de la programación funcional. Nos permite escribir código más seguro y predecible, porque podemos estar seguros de que un identificador siempre representa el mismo valor durante la ejecución del programa.
Así, aunque en el intérprete interactivo podamos cambiar valores para experimentar, en programas reales la inmutabilidad de las asignaciones nos ayuda a evitar errores y a razonar mejor sobre nuestro código. Esta es una de las ventajas clave de Elixir y otros lenguajes funcionales.