Une fois, j'ai dû changer d'emploi. Avant cela, je ne travaillais qu'avec des langages comme Python, C ++, C #, et quelques autres comme ça. Et maintenant, je devais commencer à travailler avec un langage fonctionnel. Les premières impressions étaient "qu'est-ce que c'est que ça?" Cependant, j'ai réussi à m'adapter assez rapidement. Ensuite, je parlerai des principaux points auxquels je devais m'habituer ou que je devais comprendre pour commencer à écrire rapidement et adéquatement.
1.
Correspondance des motifsC'est l'une des principales fonctionnalités du langage. Mais pour bien le comprendre, jusqu'à ce que vous commenciez vraiment à écrire dans la langue, c'est un peu difficile. La première chose que j'ai lue à propos de la correspondance de motifs est que, grâce à cette chose, vous pouvez simplement extraire des données de structures et les lier à des variables. Mais en fait, tout est un peu plus compliqué. La correspondance de motifs fonctionne presque partout dans une langue donnée. Je vais donner trois exemples illustrant les principales applications que j'utilise presque constamment.
Exemple 1. Par définition:
{tuple_item_1, tuple_item_2} = tuple
- divise un tuple à 2 éléments en deux variables, qui peuvent ensuite être utilisées.
[head_item | tail_list] = list
- divise la liste en le premier élément de la liste et la liste sans le premier élément.
Exemple 2. Comparaison au cas où:
case get_elem(struct) do {:ok, elem} -> … {:error, reason} -> … end
La fonction
get_elem (struct) renvoie un tuple et la casse vous permet d'extraire immédiatement des données et de sélectionner une autre séquence d'actions.
Exemple 3. Cartographie des fonctionnalités:
def function_1(params, :ok) do end def function_1(params, :error) do end def function_1(params, _) do end
Ici, en fait, la même fonction est présentée qui prend deux paramètres. La correspondance de modèles vous permet de choisir la fonction à exécuter.
Un peu sur la correspondance des motifs. La comparaison est toujours «descendante». Dans cet exemple, lors de l'appel de la
fonction_1 à partir de deux paramètres, il vérifiera d'abord que le deuxième paramètre est
: ok . Si la première vérification échoue, une vérification est effectuée pour
: erreur . Et si ce n'est pas le cas à nouveau, dans tous les cas, nous entrerons dans la troisième version de la méthode. Le trait de soulignement signifie «toutes les données», ainsi que le fait que les données reçues ne nous intéressent pas, c'est-à-dire que nous ne les utiliserons pas. Si
function_1 (params, _) était le premier de la liste, le programme le sélectionnerait toujours et les deux autres méthodes ne fonctionneraient jamais. Si le motif souhaité n'est pas trouvé, une exception sera levée.
2.
PipelineCe sont des constructions de la forme suivante:
param_1 |> func_1() |> func_2(param_2) …
À première vue, des ordures semblent. Mais il convient de rappeler qu'Elixir est un langage fonctionnel. Et dans un langage fonctionnel, il est tout à fait normal de faire des calculs de fonction de fonction, sans variables intermédiaires. Pipeline n'est qu'une entrée pratique. Le langage lui-même demande de la clarté pour démarrer le pipeline avec une variable ou une valeur.
L'exemple ci-dessus peut être réécrit comme suit:
func_2(func_1(param_1), param_2)
En d'autres termes, le pipeline redirige le résultat du calcul de la fonction précédente vers la fonction suivante avec le premier argument.
3.
Manque de cyclesIl n'y a pas de cycles dans Elixir. Ce fait a provoqué le plus grand choc en moi, et c'est le plus difficile à comprendre. Vient ensuite mon opinion et ma vision, qui peuvent ne pas coïncider avec la réalité et la théorie.
Les racines de ce fait sont dans le paradigme de programmation fonctionnelle, dont l'un déclare que le résultat d'un programme est le travail d'une fonction qui peut appeler d'autres fonctions et le programme n'implique pas le stockage d'états intermédiaires. Les cycles, à leur tour, sont conçus pour changer à plusieurs reprises l'état externe au cycle.
Deux choses remplacent les cycles: les méthodes de récursivité et de bibliothèque pour travailler avec des éléments énumérables du langage.
Un peu plus sur les petites choses.1. Il n'y a pas de classes dans Elixir, mais il y a des contextes. Essentiellement, les contextes remplacent en quelque sorte les classes. La description la plus proche du contexte à travers les yeux du s-sharper: les contextes sont un croisement entre une classe et un espace de noms dans sharpe, et le contexte est beaucoup plus proche de l'espace de noms.
2. Atomes. Dans Elixir, il y a une chose comme un atome. Un atome est essentiellement une sorte de «label». La façon la plus simple de les traiter est d'utiliser des lignes spéciales. Les exemples de cet article avaient déjà deux atomes
:: ok ,: error . Grâce aux atomes, l'appariement de motifs et les constructions logiques complexes sont beaucoup plus faciles. Ce sont essentiellement des constantes dont la valeur est leur nom. Un atome a toujours un «:» devant un nom.
3. Comment lire correctement les en-têtes de méthode. Dans Elixir, il est habituel de désigner les méthodes comme suit (cela est particulièrement fréquent dans la documentation):
& function / 2 . Il est lu comme une méthode avec le nom "fonction" et l'arité 2. L'arité est le nombre d'arguments pris.
Ce qui m'a aidé à m'intégrer dans la langue.Tout d'abord, il s'agit d'un répertoire sur le android "Elixir Tutorial". C'est bien car il couvre brièvement les principaux points du langage et sa syntaxe, et il peut être lu sur le bus. Moins: il est en anglais, donc il ne convient pas à tout le monde.
Deuxièmement, le livre "Introduction to Elixir" écrit par Senloren S., Eisenberg D ... Ce livre montre les méthodes de travail avec la langue et les explique. Il est facile à lire et vous permet d'améliorer considérablement votre travail avec la langue. Il peut également être trouvé en russe.
Troisièmement, la documentation officielle en ligne. Il est fait de manière pratique et vous permet de trouver rapidement les sections / méthodes nécessaires, avec une description détaillée et des exemples.
C’est tout.
Liste des matériaux:
1.
Tutoriel Elixir2. Senloren S., Eisenberg D. Introduction à l'élixir. Introduction à la programmation fonctionnelle. - O'Reilly, 2017.
3.
Documentation officielle.