Alias e import

Después de escribir este código, vamos a usarlo como base para tratar algunas herramientas útiles que nos ofrece Elixir para controlar el código de nuestros módulos. Alias sirve para darle otro nombre a un módulo y hacerlo más fácil de escribir. Import sirve para traer definiciones de otros módulos y así no tener que poner su prefijo delante.

Cuando trabajamos con Elixir, es habitual encontrarnos con módulos cuyos nombres son largos y están compuestos por varias partes separadas por puntos, como empresa.empleado o incluso cadenas más extensas como empresa.módulos.tipos.empleado. Esto puede hacer que nuestro código se vuelva repetitivo y menos legible, especialmente cuando necesitamos referenciar estas estructuras o funciones en múltiples ocasiones, por ejemplo, en patrones de coincidencia o guardas.

Para evitar tener que escribir constantemente estos nombres completos, Elixir nos ofrece mecanismos que nos permiten simplificar y hacer nuestro código más conciso. Uno de ellos es la palabra clave alias. Con alias podemos crear un nombre alternativo, más corto, para un módulo, de modo que en lugar de escribir empresa.empleado repetidamente, simplemente escribamos empleado.

La sintaxis para crear un alias es sencilla. Por ejemplo, si queremos que empleado sea un alias para empresa.empleado, escribimos:

alias empresa.empleado, as: empleado

A partir de ese momento, dentro del bloque donde declaramos el alias, podemos usar empleado en lugar del nombre completo. Es importante destacar que los alias son locales al bloque donde se definen, es decir, afectan al bloque do-end en el que están declarados y a todo lo que haya dentro de él. Esto nos permite tener alias diferentes en distintos ámbitos sin que entren en conflicto.

Aunque podríamos renombrar un módulo con un alias muy distinto, como MPL, no es recomendable porque puede generar confusión y dificultar el mantenimiento del código. Lo ideal es que el alias sea claro y representativo del módulo original.

Además de alias, Elixir nos ofrece la palabra clave import, que nos permite traer funciones de otros módulos para usarlas directamente sin necesidad de anteponer el nombre del módulo. Por ejemplo, si importamos el módulo json, podemos llamar a sus funciones como encode en lugar de json.encode.

La forma básica de usar import es:

import Json

Con esto, todas las funciones públicas de Json estarán disponibles en nuestro módulo como si fueran propias. Sin embargo, hay que tener cuidado con esta práctica, ya que puede generar conflictos si diferentes módulos tienen funciones con el mismo nombre y aridad.

Un ejemplo clásico es la función length/1, que existe tanto en el módulo Kernel como en el módulo String, pero con comportamientos distintos. Si importamos ambos módulos sin restricciones, Elixir no sabrá a cuál función length nos referimos y nos dará un error de llamada ambigua.

Para evitar estos conflictos, es recomendable limitar qué funciones importamos usando la opción only. Por ejemplo, si solo queremos importar la función encode/1 del módulo Json, podemos hacerlo así:

import Json, only: [encode: 1]

También podemos importar varias funciones especificándolas en la lista:

import Json, only: [encode: 1, decode: 1]

De esta forma, mantenemos nuestro espacio de nombres limpio y evitamos problemas de ambigüedad.

En resumen, alias nos ayuda a acortar nombres de módulos para mejorar la legibilidad y evitar escribir cadenas largas repetidamente, mientras que import nos permite usar funciones de otros módulos como si fueran propias, siempre con precaución para no generar conflictos. Ambos mecanismos son herramientas poderosas para escribir código Elixir más limpio y conciso.

Lista de reproducción
  1. 1
    mix
    10 minutos
  2. 2
    Documentando código: comentarios, docs y moduledocs
    10 minutos
  3. 3
    Atributos de módulo
    9 minutos
  4. 4
    Dependencias
    12 minutos
  5. 5
    Un ejemplo práctico de módulo útil
    13 minutos
  6. 6
    Alias e import
    10 minutos
  7. 7
    Sobre las macros, require y use
    11 minutos
  8. 8
    Typespecs (parte 1, usando tipos básicos)
    10 minutos
  9. 9
    Typespecs (parte 2, tipos propios y t())
    11 minutos
  10. 10
    Comportamientos
    11 minutos
  11. 11
    Tratamiento de errores con rescue
    8 minutos
  12. 12
    Elevando errores con raise
    8 minutos
  13. 13
    with
    14 minutos
  14. 14
    Sigilos
    8 minutos
  15. 15
    Tests con ExUnit
    12 minutos
  16. 16
    Más particularidades de ExUnit
    13 minutos
  17. 17
    Microservicios en Elixir con Plug
    11 minutos
  18. 18
    Cómo Plug.Router te ayuda a escribir microservicios en Elixir
    14 minutos
  19. 19
    ¿Cómo hacer rutas dinámicas en Phoenix y Plug?
    13 minutos