Elm (linguaggio di programmazione): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
 Recupero di 5 fonte/i e segnalazione di 0 link interrotto/i. #IABot (v2.0beta10)  | 
				m Bot: inserimento portale (via JWB)  | 
				||
| (16 versioni intermedie di 10 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 sue librerie <code>Array</code>, <code>Dict</code>, e <code>Set</code>.<ref>[ 
=== 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 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 === 
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 59 ⟶ 57: 
== Strumenti == 
* Editor online [ 
* [https:// 
* [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]] 
 | |||