Si vous avez lu des articles de blog, des fils d'actualité de hackers, des tweets de vos développeurs préférés ou écouté des podcasts, à ce stade, vous avez probablement entendu parler du langage de programmation Elixir. Le langage a été créé par José Valim, un développeur bien connu dans le monde open-source. Vous le connaissez peut-être grâce au framework Ruby on Rails MVC ou à la conception et aux gemmes de ruby simples_form sur lesquelles lui et ses collègues de Plataformatec ont travaillé ces dernières années.
Selon le José Valim, Elixir est né en 2011 . Il a eu l'idée de créer le nouveau langage en raison du manque de bons outils pour résoudre les problèmes de concurrence dans le monde ruby. À ce moment-là, après avoir passé du temps à étudier la concurrence et à distribuer des langues ciblées, il a trouvé deux langues qu'il aimait, Erlang et Clojure, qui fonctionnent dans la JVM. Il aimait tout ce qu’il voyait dans le langage Erlang (Erlang VM) et détestait les choses qu’il ne voyait pas, comme le polymorphisme, la métaprogrammation et les attributs d’extensibilité du langage pour lesquels Clojure était doué. Ainsi, Elixir est né dans cet esprit, pour avoir une alternative à Clojure et un langage dynamique qui fonctionne dans la machine virtuelle Erlang avec un bon support d'extensibilité.
Élixir se décrit comme un langage dynamique et fonctionnel avec un état immuable et une approche basée sur les acteurs de la concurrence conçue pour la construction évolutive et applications maintenables avec une syntaxe simple, moderne et soignée. Le langage fonctionne dans la machine virtuelle Erlang, une machine virtuelle distribuée, performante et à l'épreuve des combats, connue pour ses caractéristiques de faible latence et de tolérance aux pannes.
Avant de voir du code, il vaut la peine de dire qu'Elixir a été accepté par la communauté qui grandit. Si vous voulez apprendre Elixir aujourd'hui, vous trouverez facilement des livres, des bibliothèques, des conférences, des rencontres, des podcasts, des articles de blog, des newsletters et toutes sortes de sources d'apprentissage, ainsi que cela a été accepté par les créateurs d'Erlang.
Voyons un peu de code!
Installer Elixir est super facile dans toutes les grandes plates-formes et est une ligne unique dans la plupart d’entre elles.
Elixir est disponible sur Arch Linux via les référentiels officiels:
pacman -S elixir
L'installation d'Elixir dans Ubuntu est un peu ordonnée. Mais c'est néanmoins assez facile.
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb apt-get update apt-get install esl-erlang apt-get install elixir
Installez Elixir sous OS X en utilisant Homebrew .
brew install elixir
Une fois l'installation terminée, il est temps d'ouvrir votre shell. Vous passerez beaucoup de temps dans votre coquille si vous souhaitez développer dans Elixir.
Le shell interactif d'Elixir ou IEx est un REPL - (Read Evaluate Print Loop) où vous pouvez explorer Elixir. Vous pouvez y saisir des expressions et elles seront évaluées pour vous donner un retour immédiat. Gardez à l'esprit que votre code est vraiment évalué et non compilé, alors assurez-vous de ne pas exécuter de profilage ni de benchmarks dans le shell.
Il y a une chose importante que vous devez savoir avant de démarrer le REPL IEx: comment le quitter.
Vous êtes probablement habitué à frapper CTRL+C
pour fermer les programmes en cours d'exécution dans le terminal. Si vous appuyez sur CTRL+C
dans IEx REPL, vous ouvrirez le menu Break. Une fois dans le menu pause, vous pouvez appuyer sur CTRL+C
à nouveau pour quitter le shell et en appuyant sur a
.
Je ne vais pas me plonger dans les fonctions du menu de pause. Mais voyons quelques helpers IEx!
IEx fournit un tas de aides , pour tous les lister, tapez: h()
.
Et voici ce que vous devriez voir:
Ce sont quelques-uns de mes préférés, je pense qu'ils seront aussi les vôtres.
h
comme nous venons de le voir, cette fonction imprimera le message d'aide.h/1
qui est la même fonction, mais maintenant il attend un argument.Par exemple, chaque fois que vous voulez voir la documentation de String
strip/2
méthode que vous pouvez facilement faire:
Probablement le deuxième assistant IEx le plus utile que vous utiliserez lors de la programmation dans Elixir est le c/2
, qui compile un fichier elixir donné (ou une liste) et attend comme deuxième paramètre un chemin pour écrire les fichiers compilés dans .
Disons que vous travaillez dans l'une des http://exercism.io/ Elixir exersices, l'exercice Anagram.
Vous avez donc implémenté le Anagram
module, qui a la méthode match/2
dans le fichier anagram.exs. Comme le bon développeur vous l'êtes, vous avez écrit quelques spécifications pour vous assurer que tout fonctionne également comme prévu.
Voici à quoi ressemble votre répertoire actuel:
Maintenant, pour exécuter vos tests sur le module Anagram, vous devez exécuter / compiler les tests.
Comme vous venez de le voir, pour compiler un fichier, il vous suffit d'appeler elixir
exécutable passant comme argument chemin du fichier à compiler.
Supposons maintenant que vous souhaitiez exécuter la REPL IEx avec le module Anagram accessible dans le contexte de la session. Il existe deux options couramment utilisées. La première est que vous pouvez demander le fichier en utilisant les options -r
, quelque chose comme iex -r anagram.exs
. Le second, vous pouvez compiler directement depuis la session IEx.
dans quel langage de programmation Windows est-il écrit
Simple, juste comme ça!
Ok, qu'en est-il si vous souhaitez recompiler un module? Devez-vous quitter l'IEx, l'exécuter à nouveau et compiler à nouveau le fichier? Nan! Si vous avez une bonne mémoire, vous vous souviendrez que lorsque nous avons répertorié tous les helpers disponibles dans IEx REPL, nous avons vu quelque chose à propos d'une commande de recompilation. Voyons voir comment ça fonctionne.
Notez que cette fois, vous avez passé en argument le module lui-même et non le chemin du fichier.
Comme nous l'avons vu, IEx a un tas d'autres aides utiles qui vous aideront à apprendre et à mieux comprendre le fonctionnement d'un programme Elixir.
Il existe deux types de nombres. Entiers de taille arbitraire et nombres à virgule flottante.
Les entiers peuvent être écrits en base décimale, hexadécimale, octale et binaire.
Un péché Rubis , vous pouvez utiliser le trait de soulignement pour séparer des groupes de trois chiffres lors de l'écriture de grands nombres. Par exemple, vous pourriez redresser cent millions comme ceci:
100_000_000
Octal:
0o444
Hexdécimal:
0xabc
Binaire:
0b1011
Les Floare sont à double précision IEEE 754. Ils ont 16 chiffres de précision et un exposant maximum d'environ 10308.
Les flottants sont écrits en utilisant un point décimal. Il doit y avoir au moins un chiffre avant et après le point. Vous pouvez également ajouter un exposant de fin. Par exemple 1.0, 0.3141589e1 et 314159.0-e.
Les atomes sont des constantes qui représentent des noms. Ce sont des valeurs immuables. Vous écrivez un atome avec un signe deux-points :
et une séquence de lettres, de chiffres, de traits de soulignement et de signes @
. Vous pouvez également les écrire avec un signe deux-points :
et une séquence arbitraire de caractères entre guillemets.
Les atomes sont un outil très puissant, ils sont utilisés pour référencer les fonctions erlang ainsi que les touches et les méthodes Elixir.
Voici quelques atomes valides.
:name, :first_name, :'last name', :===, : [email protected] _question?
Bien sûr, les booléens sont des valeurs vraies et fausses. Mais ce qui est bien à leur sujet, c'est qu'en fin de compte, ce ne sont que des atomes.
Par défaut, les chaînes d'Elixir sont UTF-8 conforme. Pour les utiliser, vous pouvez avoir un nombre arbitraire de caractères entre '
ou '
. Vous pouvez également avoir des expressions interpolées à l'intérieur de la chaîne ainsi que des caractères d'échappement.
Sachez que les chaînes entre guillemets simples sont en fait une liste de binaires.
En tant que langage fonctionnel, Elixir a des fonctions anonymes comme type de base. Un moyen simple d'écrire une fonction est fn (argument_list) -> body end
. Mais une fonction peut avoir plusieurs corps avec plusieurs listes d'arguments, clauses de garde, etc.
Dave Thomas, dans le Programmation Elixir book, suggère que nous considérons fn… end comme étant les guillemets qui entourent une chaîne littérale, où au lieu de renvoyer une valeur de chaîne, nous retournons une fonction.
Tuple est un tableau indexé immuable. Ils sont rapides à retourner sa taille et lents à ajouter de nouvelles valeurs en raison de sa nature immuable. Lors de la mise à jour d'un tuple, vous créez en fait une toute nouvelle copie du tuple self.
Les tuples sont très souvent utilisés comme valeur de retour d'un tableau. En codant dans Elixir, vous verrez très souvent ceci, {:ok, something_else_here}
.
Voici comment nous écrivons un tuple: {?a,?b,?c}
.
Je ne pourrai pas vous expliquer tout ce que vous devez savoir sur la correspondance de motifs, mais ce que vous êtes sur le point de lire couvre une grande partie de ce que vous devez savoir pour commencer.
Elixir utilise =
comme opérateur de correspondance. Pour comprendre cela, nous devons en quelque sorte désapprendre ce que nous savons sur =
dans d'autres langues traditionnelles. Dans les langues traditionnelles, l'opérateur égal est destiné à l'affectation. Dans Elixir, les opérateurs égaux sont destinés à la correspondance de motifs.
Donc, c’est ainsi que cela fonctionne pour les valeurs dans la partie gauche. Si ce sont des variables, elles sont liées au côté droit, si ce ne sont pas des variables, elixir essaie de les faire correspondre avec le côté droit.
Elixir fournit un moyen de toujours forcer la correspondance de motif contre la variable sur le côté gauche, l'opérateur de broche.
Dans Elixir, les listes ressemblent à des tableaux tels que nous les connaissons dans d'autres langues, mais ils ne le sont pas. Les listes sont des structures liées qui se composent d'une tête et d'une queue.
Les listes de mots clés sont une liste de paires de tuples.
Vous les écrivez simplement sous forme de listes. Par exemple: [{: one, 1}, 2, {: three, 3}]. Il existe un raccourci pour définir les listes. Voici à quoi cela ressemble: [one: 1, three: 3].
Afin de récupérer un élément d'une liste de mots clés, vous pouvez soit utiliser:
qui a créé le langage de programmation c
Keyword.get([{:one, 1}, 2, {:three, 3}], :one)
Ou utilisez le raccourci:
[{:one, 1}, 2, {:three, 3}][:one]
Étant donné que les listes de mots clés sont lentes lors de la récupération d'une valeur, il s'agit d'une opération coûteuse, donc si vous stockez des données nécessitant un accès rapide, vous devez utiliser une carte.
Les cartes sont une collection efficace de paires clé / valeur. La clé peut avoir n'importe quelle valeur que vous souhaitez en tant que clé, mais elle doit généralement être du même type. Contrairement aux listes de mots clés, les cartes n'autorisent qu'une seule entrée pour une clé donnée. Ils sont efficaces au fur et à mesure qu'ils grandissent et peuvent être utilisés dans la correspondance de motifs Elixir dans les cartes d'utilisation générale lorsque vous avez besoin d'un tableau associatif.
Voici comment rédiger une carte:
%{ :one => 1, :two => 2, 3 => 3, 'four' => 4, [] => %{}, {} => [k: :v]}
Elixir est génial, facile à comprendre, a des types simples mais puissants et des outils très utiles qui vous aideront lorsque vous commencerez à apprendre. Dans cette première partie, nous avons couvert les différents types de données sur lesquels les programmes Elixir sont construits et les opérateurs qui les alimentent. Dans les parties ultérieures, nous plongerons plus profondément dans le monde d'Elixir - programmation fonctionnelle et simultanée.
En relation: Déterrer ClojureScript pour le développement frontal