Elm (linguaggio di programmazione): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Botcrux (discussione | contributi)
m Bot: (ri)aggiungo asterisco prima del template {{Collegamenti esterni}} (come da manuale)
m Bot: inserimento portale (via JWB)
 
(6 versioni intermedie di 3 utenti non mostrate)
Riga 16:
}}
 
'''Elm''' è un [[linguaggio di programmazione]] ___domain-specific per creare dichiaratamente [[GUI|interfacce- utente grafiche]] di tipo declarativo basate su [[browser web]]. Elm è puramente [[funzionale]], ed è sviluppato dando priorità all'[[usabilità]], alle prestazioni, e alla [[Robustezza (informatica)|robustezza]]. Sostiene di evitare praticamente qualunque eccezione in fase di esecuzione <ref>{{Cita web|url=https://elm-lang.org/|titolo=Elm home page}}</ref>, grazie alle verifiche statiche del [[compilatore]] Elm.
 
== Storia ==
 
Elm è stato progettato inizialmente da Evan Czaplicki come progetto di tesi nel 2012.<ref>[https://elm-lang.org/assets/papers/concurrent-frp.pdf Elm: Concurrent FRP for Functional GUIs]</ref> I primo rilascio di Elm era accompagnato da molti esempi e da un editor online che rendeva facile provare il linguaggio in un browser Web.<ref>{{Cita web |url=https://elm-lang.org/try# |titolo=Elm's Online Editor |accesso=426 gennaioaprile 2017 |urlarchivio=https://web.archive.org/web/20170521144831/http://elm-lang.org/try# |dataarchivio=21 maggio 2017 |urlmorto=sì2025 }}</ref> Evan Czaplicki è entrato a far parte di [[Prezi]] nel 2013 per lavorare su Elm,<ref>{{Cita web |url=https://elm-lang.org/blognews/announce/Elmelm-and-Prezi.elm prezi|titolo=ElmWorking joinson PreziElm |accesso=1 maggio 2019 |urlarchivio=https://web.archive.org/web/20150524043516/http://elmfull-lang.org/blog/announce/Elm-and-Prezi.elmtime |dataarchivioaccesso=2426 maggioaprile 2015 |urlmorto=sì2025 }}</ref> e nel 2016 si è spostato in [[NoRedInk]] come ingegnere [[Open source|Open Source]], dando inoltre vita alla Elm Software Foundation.<ref>[https://elm-lang.org/blog/new-adventures-for-elm New Adventures for Elm]</ref>
 
L'implementazione iniziale del compilatore Elm genera codice HTML, CSS, e JavaScript.<ref>[https://github.com/elm-lang/Elm Elm compiler source code]</ref> L'insieme di strumenti di base si è continuato a espandere, e adesso comprende un [[Read–eval–print loop|interprete interattivo]],<ref>{{Cita web |url=https://elm-lang.org/blognews/announce/Repl.elmrepl |titolo=Elm REPL announcement |accesso=126 maggioaprile 2019 |urlarchivio=https://web.archive.org/web/20150531012310/http://elm-lang.org/blog/announce/Repl.elm |dataarchivio=31 maggio 2015 |urlmorto=sì2025 }}</ref> un gestore di pacchetti,<ref>{{Cita web |url=https://elm-lang.org/blognews/announce/PackageManager.elmpackage-manager |titolo=Elm Package Manager announcementManage |accesso=126 maggioaprile 2019 |urlarchivio=https://web.archive.org/web/20160313050335/http://elm-lang.org/blog/announce/packagemanager.elm |dataarchivio=13 marzo 2016 |urlmorto=sì2025 }}</ref> un debugger che consente viaggi nel tempo,<ref>{{Cita web |url=http://debug.elm-lang.org/# |titolo=Elm's Time-Traveling Debugger |accesso=4 gennaio 2017 |urlarchivio=https://web.archive.org/web/20170503192633/http://debug.elm-lang.org/# |dataarchivio=3 maggio 2017 |urlmorto=sì }}</ref> e degli installatori per Mac e Windows.<ref>[https://github.com/elm-lang/elm-platform Elm Platform]</ref> Inoltre, Elm ha un ecosistema di librerie create dalla comunità di utenti.<ref>[https://package.elm-lang.org/packages/ Elm Public Libraries] {{webarchive|url=https://web.archive.org/web/20150211183935/http://package.elm-lang.org/packages/ |data=11 febbraio 2015 }}</ref>
 
== Caratteristiche ==
Riga 43:
=== Sistema di moduli ===
 
Elm ha un sistema di moduli che consente ai programmatori di suddividere il loro codice in parti più piccole, chiamate "moduli". I programmatori possono importare ed esportare simboli, rendendo possibile nascondere i dettagli implementativi che non sono necessari agli altri moduli. I moduli formano la base del [[Sito web|sito Web]] della libreria della comunità di Elm, la [https://web.archive.org/web/20150211183935/http://package.elm-lang.org/packages/ Elm Public Library].
 
=== Interoperabilità con HTML, CSS, e JavaScript ===
Riga 57:
== Strumenti ==
 
* Editor online [https://web.archive.org/web/20170521144831/http://elm-lang.org/try elm-lang.org/try] per facili esperimenti
* [https://githubellie-app.com/elm-lang/elm-platformnew PiattaformaEllie], Elm]un editor perpiù installareavanzato localmentecon glisupporto strumentiall'aggiunta di baselibrerie
* [https://webguide.archiveelm-lang.org/web/20170503192633/ La guida ufficiale] ed [http://debug.elm-lang.org/examples Debugger che viaggia nel tempoesempi]
* [https://webpackage.archiveelm-lang.org/webpackages/20160312041030elm/http:core/latest/elm-lang.org/learn.elm RisorseLibreria di apprendimentobase] e [httpshttp://webpackage.archive.org/web/20160313114119/http://elm-lang.org/examples.elmpackages/ librerie della esempicomunità]
* [https://lydell.github.io/elm-watch elm-watch] per sviluppo con live reload
* [https://package.elm-lang.org/packages/elm-lang/core/latest/ Librerie di base] e [https://web.archive.org/web/20150211183935/http://package.elm-lang.org/packages/ librerie della comunità]
* [https://github.com/jfmengels/node-elm-review elm-review] per il linting
* [https://github.com/avh4/elm-format elm-format], il formattatore standard utilizzato dalla maggior parte degli utenti
 
== Codice di esempio ==
Riga 74 ⟶ 76:
{- I commenti su più righe possono essere {- annidati -} -}
 
{--| Qui definiamo un valore chiamato ''saluti''. Il tipo viene inferito essere String.
 
La pipe (|) all'inizio del commento indica che questa è documentazione per il valore che stiamo definendo.
 
-}
saluti =
"Hello World!"
 
 
{--| È meglio aggiungere annotazioni di tipo alle dichiarazioni di primo livello.
-}
ciao : String
ciao =
"Ehilà."
 
 
{--| Le funzioni si dichiarano allo stesso modo, con gli argomenti che seguono il nome della funzione.
-}
aggiungi x y =
x + y
 
 
{--| Ancora, è meglio aggiungere le annotazioni di tipo.
-}
ipotenusa : Float -> Float -> Float
ipotenusa a b =
sqrt (a ^ 2 + b ^ 2)
 
 
-- Le espressioni `if` si usano per fare diramazioni in base a valori
valoreAssoluto : Int -> Int
valoreAssoluto numero =
-- Le espressioni `if` si usano per fare diramazioni in base a valori
if numero < 0 then -numero else numero
-numero
 
else
-- I record si usano per tenere valori in campi aventi un nome
numero
libro : { titolo:String, autore:String, pagine:Int }
 
 
{--| I record si usano per tenere valori in campi aventi un nome
-}
libro : { titolo : String, autore : String, pagine : Int }
libro =
{ titolo = "Steppenwolf"
, autore = "Hesse"
, pagine = 237
}
 
 
{--| Possiamo creare tipi completamente nuovi usando la parola-chiave `type`.
-- Il seguente valore rappresenta un albero binario.
 
-- Il seguente valore rappresenta un albero binario.
 
-}
type Albero a
= Vuoto
| Nodo a (Albero a) (Albero a)
 
 
{--| È possibile ispezionare questi tipi usando espressioni `case`.
-}
profondita : Albero a -> Int
profondita albero =
case albero of
Vuoto -> 0
0

Nodo valore sinistra destra ->
1 + max (profondita sinistra) (profondita destra)
</syntaxhighlight>
 
Riga 125 ⟶ 152:
==Collegamenti esterni==
* {{Collegamenti esterni}}
 
{{Portale|informatica}}
 
[[Categoria:Linguaggi di programmazione funzionali]]