Fundamentos de funciones

En esta lección estudiaremos conceptos esenciales para comprender las funciones de Elixir, tales como la aridad o los módulos. La aridad es el número de parámetros que acepta una función. En Elixir es importante porque dos funciones que se llamen igual pero que tengan aridades diferentes son distintas. Es legal tener dos funciones con el mismo nombre a la vez en el mismo módulo siempre que tengan distinta aridad. Hablando de módulos, ¿qué son? Y por el camino, presento algunas funciones interesantes, como Kernel.is_atom/1, Kernel.is_integer/1...

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.

Lista de reproducción
  1. 1
    ¿Qué es Elixir?
    10 minutos
  2. 2
    Instalación de Elixir
    9 minutos
  3. 3
    ¿Qué es la programación funcional? (Como la de Elixir)
    20 minutos
  4. 4
    ¿Cómo funciona la REPL de Elixir?
    7 minutos
  5. 5
    ¿Cómo hacer asignaciones en Elixir?
    7 minutos
  6. 6
    Operadores aritméticos básicos
    6 minutos
  7. 7
    ¿Qué son los tipos de datos de Elixir?
    5 minutos
  8. 8
    Átomos en Elixir
    4 minutos
  9. 9
    Las palabras clave nil, true y false
    6 minutos
  10. 10
    Operadores lógicos de comparación
    8 minutos
  11. 11
    Comparación estricta con ===
    3 minutos
  12. 12
    Operadores lógicos y proposicionales
    8 minutos
  13. 13
    Invocación de funciones
    10 minutos
  14. 14
    Fundamentos de funciones
    9 minutos
  15. 15
    Cadenas de caracteres
    8 minutos
  16. 16
    Entrada y salida estandar de la mano de gets y puts
    9 minutos
  17. 17
    Concatenar e interpolar strings
    9 minutos
  18. 18
    Código fuente en archivos
    9 minutos
  19. 19
    Condicional IF y bloques DO-END
    11 minutos
  20. 20
    IFs anidados, UNLESS y COND
    12 minutos
  21. 21
    Definición de funciones
    11 minutos
  22. 22
    Fundamentos de compilación de módulos
    6 minutos
  23. 23
    Guardas
    8 minutos
  24. 24
    Funciones anónimas
    7 minutos
  25. 25
    Capturar funciones
    4 minutos
  26. 26
    Invocación de funciones dentro del mismo módulo
    7 minutos
  27. 27
    Tuplas
    8 minutos
  28. 28
    Introducción al pattern matching
    8 minutos
  29. 29
    Pattern matching en funciones
    11 minutos
  30. 30
    Las tuplas :ok, :error
    7 minutos
  31. 31
    case
    10 minutos
  32. 32
    Operador pin
    7 minutos
  33. 33
    Pattern matchings y recursividad
    5 minutos
  34. 34
    Listas
    9 minutos
  35. 35
    Operadores y funciones de lista
    10 minutos
  36. 36
    Keyword lists: listas de palabras clave
    8 minutos
  37. 37
    Mapas
    7 minutos
  38. 38
    Pattern matching de mapas y keyword lists
    6 minutos
  39. 39
    Operadores y funciones para mapas y keyword lists
    5 minutos
  40. 40
    Estructuras con defstruct
    11 minutos
  41. 41
    Bitstrings
    11 minutos
  42. 42
    Charlists
    10 minutos
  43. 43
    Funciones de alto orden en Elixir
    5 minutos
  44. 44
    Uso de la función filter
    10 minutos
  45. 45
    Uso de la función map
    7 minutos
  46. 46
    Uso de la función reduce
    9 minutos
  47. 47
    Pipelines
    11 minutos
  48. 48
    Rangos y Streams
    11 minutos
  49. 49
    Funciones recursivas con listas
    14 minutos