Cuando trabajamos con Elixir, una de las herramientas más útiles que tenemos a mano es IEX, el intérprete interactivo que nos permite probar funciones y explorar la librería estándar de forma rápida y sencilla. En ocasiones, puede que olvidemos el nombre exacto de una función o cómo utilizarla, y para eso, el autocompletado con la tecla tabulador se convierte en nuestro mejor aliado. Por ejemplo, si escribimos una letra o parte del nombre de una función y pulsamos tabulador, IEX nos mostrará todas las funciones disponibles que coincidan con ese patrón. Así, si escribimos la letra R y pulsamos tabulador, veremos funciones como Rem, Round, RuntimeInfo, Ref o Require, entre otras.
Un aspecto fundamental que debemos entender en Elixir es la aridad de las funciones. La aridad es el número de argumentos que una función acepta, y en Elixir podemos tener varias funciones con el mismo nombre siempre que difieran en su aridad. Por ejemplo, WhereAmI/0 es una función llamada WhereAmI que no acepta argumentos, mientras que WhereAmI/1 acepta un argumento. Esto se refleja en la notación con una barra y un número, que indica la aridad. Las funciones sin parámetros pueden invocarse sin paréntesis, lo que hace que el código sea más limpio y legible cuando no hay ambigüedad. Por ejemplo, podemos llamar a RuntimeInfo sin paréntesis y obtener información sobre el entorno de ejecución, como el consumo de memoria o detalles sobre ETS.
Sin embargo, cuando combinamos funciones o pasamos argumentos, es recomendable mantener los paréntesis para evitar confusiones en la interpretación del código por parte de IEX. Por ejemplo, al usar funciones como Trunk para truncar números decimales, podemos escribir Trunk 3.25 sin paréntesis, pero si anidamos funciones, es mejor usar paréntesis para delimitar claramente cada llamada.
Además de las funciones básicas, Elixir incluye muchas funciones de apoyo que nos permiten realizar comprobaciones sencillas, como isAtom/1 para verificar si un valor es un átomo o isInteger/1 para saber si es un entero. Estas funciones devuelven valores booleanos y son muy útiles para validar datos o controlar flujos en nuestros programas.
Dado que la librería estándar de Elixir es muy extensa, para mantener todo organizado y facilitar su aprendizaje, las funciones se agrupan en módulos. Un módulo es como una carpeta que contiene funciones relacionadas y siempre comienza con una letra mayúscula. Por ejemplo, el módulo Integer agrupa funciones para trabajar con números enteros, mientras que Float contiene funciones para números de punto flotante y Atom para átomos. Para acceder a las funciones dentro de un módulo, usamos el operador punto. Por ejemplo, Atom.toCharlist o Integer.mod.
Si queremos profundizar en el uso de una función o entender qué hace un módulo, podemos consultar la documentación oficial de Elixir, disponible en línea en sitios como xdocs. Esta documentación es un recurso esencial que incluye todos los módulos y funciones de la librería estándar, con ejemplos y explicaciones detalladas. Por ejemplo, el módulo Kernel es uno de los más importantes y muchas de sus funciones, como rem o isNumber, pueden usarse sin necesidad de anteponer el nombre del módulo, ya que Elixir lo asume por defecto.
Explorar la documentación nos permite descubrir funciones útiles y entender mejor cómo aprovechar la potencia de Elixir en nuestros proyectos. Así, podemos consultar desde funciones matemáticas hasta utilidades para manipular cadenas, trabajar con listas o gestionar procesos concurrentes, todo organizado y accesible para que podamos aprender y aplicar rápidamente lo que necesitemos.