Elm (linguaggio di programmazione): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
| m smistamento lavoro sporco e fix vari | m Bot: inserimento portale (via JWB) | ||
| (21 versioni intermedie di 12 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.<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> == 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.<ref name="syntax"> === 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>{{Cita web|titolo=Model The Problem|url= 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  === Interoperabilità con HTML, CSS, e JavaScript === Elm usa un'astrazione chiamata "porte" per comunicare con [[JavaScript]].<ref> Elm ha una libreria chiamata "elm-html", che i programmatori possono usare per specificare codice HTML e CSS dall'interno di Elm.<ref>[ == Limitazioni == Riga 60 ⟶ 58: * Editor online [http://elm-lang.org/try elm-lang.org/try] per facili esperimenti * [https:// * [ * [ * [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 == < -- Questo è un commento su una sola riga Riga 76: {- 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!" {- -} ciao : String ciao =     "Ehilà." {- -} aggiungi x y =     x + y {- -} 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 -- I record si usano per tenere valori in campi aventi un nome▼         numero libro : { titolo:String, autore:String, pagine:Int }▼ -} ▲libro : { titolo : String, autore : String, pagine : Int } libro =     { titolo = "Steppenwolf"     , autore = "Hesse"     , pagine = 237     } {- -- Il seguente valore rappresenta un albero binario.▼ -} type Albero a     = Vuoto     | Nodo a (Albero a) (Albero a) {- -} profondita : Albero a -> Int profondita albero =     case albero of         Vuoto ->             0 Nodo valore sinistra destra ->             1 + max (profondita sinistra) (profondita destra) </syntaxhighlight> ==Note== Riga 126 ⟶ 151: ==Collegamenti esterni== * {{Collegamenti esterni}} {{Portale|informatica}} [[Categoria:Linguaggi di programmazione funzionali]] | |||