Aller au contenu
Wikipédia l'encyclopédie libre

Elm (langage)

Un article de Wikipédia, l'encyclopédie libre.

Pour les articles homonymes, voir Elm.

Elm (langage)
Logo.

Date de première version 2012
Paradigme fonctionnel
Auteur Evan Czaplicki
Dernière version 0.19.1 (21 Octobre 2019)
Typage statique
Influencé par Haskell Voir et modifier les données sur Wikidata
Écrit en Haskell Voir et modifier les données sur Wikidata
Système d'exploitation Linux, Windows et Mac
Licence Licence BSD Voir et modifier les données sur Wikidata
Site web https://elm-lang.org/
Extension de fichier elmVoir et modifier les données sur Wikidata
modifier

Cet article est une ébauche concernant l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment? ) selon les recommandations des projets correspondants.

Elm est un langage de programmation fonctionnel qui permet de créer des interfaces graphiques pour le web. Il compile le code en JavaScript.

Historique

[modifier | modifier le code ]

Elm a été créé par Evan Czaplicki en 2012[1] . La première version d'Elm vient avec quelques exemples et un éditeur en ligne, pour tester le langage[2] . Evan Czaplicki rejoint Prezi en 2013 pour travailler sur Elm[3] , et en 2016, il lance la fondation Elm Software Foundation[4] .

L'implémentation initiale d'Elm cible HTML, CSS et Javascript. Les outils se sont étendus avec désormais un REPL[5] , un gestionnaire de paquets[6] , un « débogueur dans le temps »[7] ainsi qu'un installateur pour Windows et Mac[8] .

Caractéristiques

[modifier | modifier le code ]

Elm possède peu de structures de langage mais celles-ci sont très expressives : if, let, case, fonctions anonymes et interpolation de listes[9] ,[10] . Ses principales caractéristiques sont : les souscriptions, l'immutabilité, le typage statique et l'interopérabilité avec HTML, CSS et JavaScript.

Souscriptions

[modifier | modifier le code ]

La grande abstraction d'Elm est appelée « Sub ». Il s'agit d'un évènement qui déclenche une fonction :

importHtmlexposing(Html)
importHtml.AppasHtml
importSvgexposing(..)
importSvg.Attributesexposing(..)
importTimeexposing(Time,second)

main =
Html.program
{init=init
,view=view
,update=update
,subscriptions=subscriptions
}

typealiasModel=Time

init:(Model,CmdMsg)
init=
(0,Cmd.none)

typeMsg
=TickTime

update:Msg->Model->(Model,CmdMsg)
updateactionmodel=
caseactionof
TicknewTime->
(newTime,Cmd.none)

subscriptions:Model->SubMsg
subscriptionsmodel=
Time.everysecondTick

view:Model->HtmlMsg
viewmodel=
let
angle=
turns(Time.inMinutesmodel)

handX=
toString(50+40*cosangle)

handY=
toString(50+40*sinangle)
in
svg[viewBox"0 0 100 100",width"300px"]
[circle[cx"50",cy"50",r"45",fill"#0B79CE"][]
,line[x1"50",y1"50",x2handX,y2handY,stroke"#023963"][]
]

Immutabilité

[modifier | modifier le code ]

Toutes les valeurs d'Elm sont immutables, cela signifie qu'une valeur ne peut pas changer après avoir été créée.

Typage statique

[modifier | modifier le code ]

Elm est statiquement typé.

Elm fonctionne avec des modules.

Interopérabilité avec HTML, CSS et JavaScript

[modifier | modifier le code ]

Elm utilise une abstraction nommée port pour communiquer avec JavaScript.

Exemple de code

[modifier | modifier le code ]
-- Commentaire sur une ligne

{- Ceci est un commentaire multiligne.
 Il peut continuer sur plusieurs lignes.
-}

{- Il est possible {- d'imbriquer -} les commentaires multilignes -}

-- Définition d'une valeur nommée « greeting ». Le type est inféré comme un « String ».
greeting=
"Hello World!"

-- Il est préférable d'ajouter l'annotation des types pour les déclarations de haut-niveau.
hello:String
hello=
"Hi there."

-- Les fonctions sont déclarées de la même façon, avec les arguments qui suivent le nom de la fonction.
addxy=
x+y

-- Il est préférable d'annoter les types pour les fonctions aussi.
hypotenuse:Float->Float->Float
hypotenuseab=
sqrt(a^2+b^2)

-- Le « if » est une expression : il retourne une valeur.
absoluteValue:Int->Int
absoluteValuenumber=
ifnumber<0then-numberelsenumber

-- Les enregistrements sont utilisés pour grouper les valeurs avec des noms.
book:{title:String,author:String,pages:Int}
book=
{title="Steppenwolf"
,author="Hesse"
,pages=237
}

-- Il est possible de créer un nouveau type avec le mot-clé « type ».
-- Ce qui suit représente un arbre binaire.
typeTreea
=Empty
|Nodea(Treea)(Treea)

-- Il est possible d'inspecter ces types avec une expression « case ».
depth:Treea->Int
depthtree=
casetreeof
Empty->0
Nodevalueleftright->
1+max(depthleft)(depthright)

Références

[modifier | modifier le code ]
  1. ↑ Evan Czaplicki's thesis on Elm
  2. ↑ (en) « Elm's Online Editor », sur elm-lang.org.
  3. ↑ « Elm joins Prezi », sur elm-lang.org via Internet Archive .
  4. ↑ (en) « New Adventures for Elm », sur elm-lang.org.
  5. ↑ « Elm REPL announcement », sur elm-lang.org via Internet Archive .
  6. ↑ « Elm Package Manager announcement », sur elm-lang.org via Internet Archive .
  7. ↑ « Elm's Time-Traveling Debugger », sur elm-lang.org via Internet Archive .
  8. ↑ « Elm Platform », sur GitHub.
  9. ↑ « The Syntax of Elm », sur elm-lang.org via Internet Archive .
  10. ↑ About Elm Elm features

Liens externes

[modifier | modifier le code ]

AltStyle によって変換されたページ (->オリジナル) /