Elm (linguaggio di programmazione): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
|  Iniziata traduzione | m Bot: inserimento portale (via JWB) | ||
| (32 versioni intermedie di 19 utenti non mostrate) | |||
| Riga 1: {{Linguaggio di programmazione |nome = Elm |autore = [[Evan Czaplicki]] |data = [[2012]] |versione = 0. |utilizzo = generazione pagine Web dinamiche |paradigmi = [[programmazione funzionale]] |tipizzazione = forte, statica, inferita |estensione = .elm |influenzato_da = [[Haskell (linguaggio)|Haskell]], [[Standard ML]], [[OCaml]], [[F Sharp |ha_influenzato = <!-- Lista di linguaggi influenzati dal linguaggio in esame, citare le fonti --> |implementazione_riferimento = <!-- Implementazione di riferimento: compilatore o interprete? --> Riga 15 ⟶ 14: |licenza = Permissiva ([[BSD license|Revised BSD]]) <ref name=license>https://github.com/evancz/Elm/blob/master/LICENSE</ref> |lingua = Inglese }} '''Elm''' è un [[linguaggio di programmazione]] ___domain-specific per creare == Storia == Elm è stato progettato inizialmente da Evan Czaplicki come progetto di tesi nel 2012. L'implementazione iniziale del compilatore Elm genera codice HTML, CSS, e JavaScript. == Caratteristiche == Elm ha un insieme piccolo ma espressivo di costrutti linguistici, tra cui espressioni `if`, espressioni `let`, espressioni `case`, funzioni anonime, e interpolazioni di lista. === Immutabilità === Tutti i valori in Elm sono immutabili, cioè nessun valore può essere modificato dopo che è stato creato. Elm usa strutture dati persistenti per implementare le  === Tipizzazione statica === Riga 39 ⟶ 37: * tipi primitivi come interi e stringhe * strutture dati di base come liste, ennuple, e record estendibili * tipi personalizzati, chiamati `unioni taggate` che consentono di costruire tipi interamente nuovi <ref>{{ Elm supporta anche la completa inferenza di tipo, così che il compilatore possa verificare che un programma sia type-safe anche senza annotazioni di tipo. Riga 45 ⟶ 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  ===  Elm  Elm  ==  Diversamente da Haskell, Elm non supporta i tipi di livello superiore, e quindi non può fornire astrazioni generiche per molte operazioni comuni.<ref>{{Cita web|titolo=Higher-Kinded types Not Expressible? #396|url=https://github.com/elm-lang/elm-compiler/issues/396|sito=github.com/elm-lang/elm-compiler|accesso=6 marzo 2015}}</ref> Per esempio, non ci sono funzioni generiche <code>map</code>, <code>apply</code>, <code>fold</code>, né <code>filter</code>. Invece, tali nomi si usano prefissi dal nome del modulo in cui sono definiti, come per <code>List.map</code> e <code>Dict.map</code>. ==  * Editor online [http://elm-lang.org/try elm-lang.org/try] per facili esperimenti * [https://ellie-app.com/new Ellie], un editor più avanzato con supporto all'aggiunta di librerie * [https://guide.elm-lang.org/ La guida ufficiale] ed [http://elm-lang.org/examples esempi] * [https://package.elm-lang.org/packages/elm/core/latest/ Libreria di base] e [http://package.elm-lang.org/packages/ librerie della comunità] * [https://lydell.github.io/elm-watch elm-watch] per sviluppo con live reload * [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 == <syntaxhighlight lang="elm"> -- Questo è un commento su una sola riga {- Questo è un commento su più righe.    Può estendersi su molte righe. -} {- I commenti su più righe possono essere {- annidati -} -} {- 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) valoreAssoluto : Int -> Int valoreAssoluto numero =     -- Le espressioni `if` si usano per fare diramazioni in base a valori     else         numero {-| 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. -} 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         Nodo valore sinistra destra ->             1 + max (profondita sinistra) (profondita destra) </syntaxhighlight> == <references /> ==Collegamenti esterni== * {{Collegamenti esterni}} {{Portale|informatica}} [[Categoria:Linguaggi di programmazione funzionali]] | |||