functional reactive programming language • funkcia programlingvo • reactive programming language • programlingvo • pure funkcia programlingvo • off-side rule language
Paradigmo:
Funkcia
Paradigmo(j): funkcia programado • reagema programado • pure funkcia programado • funkcia reagema programado
Elm estas funkcia lingvo de programado kiu eblas krei grafikajn interfacojn por iu ajn retejo kaj ankaŭ ludojn. Ĝi transigas la kodon en ĜavaSkripto. La funkcieco de lingvoprogramado kiel Elm ebligas:
Neniuj rultempaj eraroj praktike.
Amikaj erarmesaĝoj.
Fidinda redesignado.
Aŭtomate devigita semantika versio por ĉiuj Elm-pakaĵoj.
Historio
Elm kreitis de Evan Czaplicki en 2012[1]. La unua versio de Elm aperis kun iuj ekzemploj kaj interreta redaktilo, por testi la lingvon[2]. Evan Czaplicki aliĝis Prezi en 2013 por prilabori la lingvon Elm[3], kaj en 2016, li kreis la fondaĵon «Elm Software Foundation»[4].
La unua versio de Elm celis HTML, CSS kaj ĜavaSkripto. Iloj pliboniĝis dum la jaroj, kun nun REPL[5], paka mastrumilo[6], tempovojaĝanta erarserĉilo[7] kaj ankaǔ instaliloj por Vindozo kaj Mak[8]. Ankaǔ vi povas instali Elm linuksen.
Karakterizaĵoj
Elm havas malmultajn lingvajn strukturojn sed ĉi tiuj estas tre esprimoplenaj : if, let, case, nenomitaj funkcioj kaj listoj[9]. Ĝiaj precipaj karakterizaĵoj estas : abonoj, neŝanĝebleco, statika tipo kaj kunfunkciebleco kun HTML, CSS kaj ĜavaSkripto.
Abonoj
Grava ebleco de la karakterizavĵoj de Elm, estas la abono de funkcio al evento:
Ĉiuj valoroj neŝanĝeblecas, tiu signifas ke valoro ne povos ŝanĝigota post ĝia kreitaĵo.
Statika tipo
Elm uzas statikan tipsistemon.
Moduloj
Elm uzas modulojn kiujn vi povas instali per paka mastrumilo.
Kunfunkciebleco kun HTML, CSS kaj ĜavaSkripto
Elm uzas abstraktecon nomitan port por komuniki kun ĜavaSkripto.
Ekzempla kodo
-- Komenta linio{- Ĉi tio estas plurlinia komento. Ĝi povas daŭri laŭ pluraj linioj.-}{- Eblas {- imbriki -} plurliniajn komentojn -}-- Definas valoron nomitan «saluto». La deduktita tipo estas kiel «String» (Ĉeno de signoj) saluto="Saluton al ĉiuj!"-- Pli bone estas aldoni tipan komentadon por supraj nivelaj deklaroj.saluton:Stringsaluton="Saluton."-- Funkcioj kreitas same, kun siaj argumentoj malantaǔe la funkcia nomo. plusxy=x+y-- Estas ankaǔ pli bone komenti la tipojn de la funkcioj.hypotenuzo:Float->Float->Floathypotenuzoab=sqrt(a^2+b^2)-- «if» estas esprimo kiu redonas valoron.absolutValoro:Int->IntabsolutValoronumero=ifnumero<0then-numeroelsenumero-- La registradoj uzitas por kunmeti nomitajn valorojn.libro:{titolo:String,aŭtoro:String,pagoj:Int}libro={titolo="Steppenwolf",aŭtoro="Hesse",paĝoj=237}-- Eblas krei novan tipon per ŝlosvorto «type».-- La sekvanto reprezentas duuman arbon.typeArboa=Malpleno|Nodoa(Arboa)(Arboa)-- Eblas inspekti tipojn kun esprimo «case».profundoDe:Arboa->IntprofundoDearbo=casearboofMalpleno->0Nodovaloromaldekstrodekstro->1+max(profundoDemaldekstro)(profundoDedekstro)