Le raccourci & pour les fonctions anonymes

Sans doute êtes-vous déjà tombé sur une notation étrange dans du code Elixir, utilisant l’espertluette (&). Par exemple :

Enum.filter([1, 2, 3], & &1 != 2)

Ceci est tout simplement la notation raccourci pour les fonctions anonymes (voir la doc officielle) ! Le & seul est un raccourci pour fn arguments -> ou “arguments” sera remplacé par le nombre d’argument requis. Par ailleurs, le end indiquant la fin de la fonction anonyme n’est plus requis ! Le second, &1 est tout simplement le premier argument de la fonction anonyme !

Plus que le a théorie, voici quelques exemples concrets. En réalité c’est très simple, et il suffit de “s’entraîner” une fois ou deux à transformer une fonction anonyme en notation raccourci (et inversement) pour comprendre le truc.


sum = &(&1 + &2)
# Qui pourrait d'ailleurs être écrit sans parenthèses
sum = & &1 + &2

# Est l'équivalent de
sum = fn arg1, arg2 -> arg1 + arg2 end

Autre exemple dans un callback, si l’on souhaitait retirer les éléments dont le status est “draft” dans une liste :

my_items
|> Enum.reject(& &1.status == "draft")

# équivaut à
my_items
|> Enum.reject(fn element -> element.status == "draft" end)

Leave a Reply

Your email address will not be published. Required fields are marked *