Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Elixir

Erlang y Elixir, Parte 3: Funciones

by
Read Time:4 minsLanguages:
This post is part of a series called Introduction to Erlang and Elixir.
Erlang and Elixir, Part 2: Data Types
Erlang and Elixir, Part 4: Control Flow

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

Elixir está construido sobre Erlang, y en ambos una función no solo es definida por su nombre, sino por su nombre y aridad. Recuerda: Todo en Elixir es una expresión.

Para darte un ejemplo claro de esto, abajo tenemos cuatro funciones, pero todas definidas con distinta aridad.

Para proporcionar una manera concisa de trabajar con datos, podemos usar expresiones de guardia como:

Las expresiones de guardia tales como when is_binary(a) nos permiten revisar el tipo correcto antes de realizar una operación.

A diferencia de Erlang, Elixir permite valores por defecto en sus funciones vía el uso de la sintaxis \\ como:

Funciones Anónimas

En la parte previa, discutimos brevemente funciones anónimas como un tipo de dato. Para profundizar en esto un poco más, toma este ejemplo:

Vemos esto en la primera línea fn(a, b) -> a + b end. Con esto podemos producir una operación básica sum.(4,3) y obtener el resultado en solo dos líneas de código.

Ahora, viendo al método cuadrado, fn(x) -> x * x end, ¿realmente podría ser más simple? Trabajando ahora con el map, podemos realizar la función anónima cuadrado sobre todo el mapa--¡de nuevo en solo dos líneas de código!

Emparejamiento de Patrón

La aritmética es buena y divertida, pero veamos qué podemos hacer con texto.

Aquí, con el emparejamiento de patrón, podemos definir varios resultados en nuestro flujo de control, de nuevo con apenas algún código. La sintaxis de Elixir es rápida para trabajar y muy poderosa, como veremos en el siguiente ejemplo.

Funciones de Primera Clase

Las funciones anónimas que cubrimos son valores de primera clase. Esto significa que pueden ser pasadas como argumentos a otras funciones y también servir mientras devuelven valores por ellas mismas. Esta es una sintaxis para trabajar con funciones nombradas de la misma manera:

Aquí definimos un módulo Math con defmodule y definimos la función cuadrado. Entonces podemos usar esto en conjunto con el método map demostrado anteriormente y el módulo Math que recién definimos. Usamos el mismo operador &, permitiéndonos pasar nuestra función Math.square/1 para capturar la salida de la función cuadrado para cada entrada en nuestra lista.

Eso es mucho poder para solo una línea. Esto es referido como captura de función parcial en Elixir.

Flujo de Control

Usamos los constructores if y case para flujo de control en Elixir. Como todo en Elixir, if y case son expresiones.

Para emparejamiento de patrón, usamos case:

Y para lógica de comparación, usamos if:

Para facilidad de uso, Elixir también proporciona una función if que se parece a muchos otros lenguajes y es útil cuando necesitas revisar si una cláusula es verdadera o falsa:

Funciones Dinámicas

Esto es posible en Elixir vía el uso del método unquoute mencionado anteriormente. Por ejemplo, para revisar Admins apuntalados en nuestro sistema, podemos hacer lo siguiente:

Aquí hemos creado los métodos Admins.check_manager y Admins.check_super desde nombres atom.

Conclusión

Todo es una expresión en Elixir, y eso significa que podemos sacar mucho poder de escribir muy poco código.

Para mi, Elixir se ve similar a CoffeeScript, Ruby, Python o cualquier sintaxis minimalista ya que la forma es tan directa al punto, pero Elixir es mucho más poderoso que esos lenguajes debido al aspecto de meta-programación.

Avanzando, veremos cómo utilizar flujo de control y funciones más para crear interactividad en nuestra app.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.