Elm Language Samouczek
Pierwsze kroki w Elm Language
Szukaj…
Uwagi
[Elm] [1] to przyjazny funkcjonalny język programowania kompilujący się w JavaScript. Elm koncentruje się na GUI opartych na przeglądarce, aplikacjach jednostronicowych.
Użytkownicy zazwyczaj chwalą to za:
- Brak wyjątków czasu wykonywania.
- Najlepsze błędy kompilatora w historii
- Łatwość refaktoryzacji.
- Ekspresyjny system typów
- Architektura wiązów , której inspiracją jest Redux.
Wersje
| Wersja | Data wydania |
|---|---|
| 0.18.0 | 14.11.2016 |
| 0.17.1 | 27.06.2016 |
| 0,17 | 2016-05-10 |
| 0,16 | 2015-11-19 |
| 0.15.1 | 30.06.2015 |
| 0,15 | 2015-04-20 |
Instalacja
Aby rozpocząć programowanie z Elm, musisz zainstalować zestaw narzędzi o nazwie elm-platform .
Obejmuje on: wiąz , reaktor wiązów , wiąz wiązów i pakiet wiązów .
Wszystkie te narzędzia są dostępne za pośrednictwem interfejsu CLI, innymi słowy można z nich korzystać z poziomu terminala.
Wybierz jedną z następujących metod, aby zainstalować Elm:
Korzystanie z instalatora
Pobierz instalator z oficjalnej strony internetowej i postępuj zgodnie z instrukcjami kreatora instalacji.
Korzystanie z npm
Możesz użyć Menedżera pakietów Node, aby zainstalować platformę Elm.
Instalacja globalna:
$ npm install elm -g
Instalacja lokalna:
$ npm install elm
Lokalnie zainstalowane narzędzia platformy Elm są dostępne poprzez:
$ ./node_modules/.bin/elm-repl # launch elm-repl from local node_modules/
Korzystanie z homebrew
$ brew install elm
Przełączaj się między wersjami z użyciem wiązu
Zainstaluj wiąz
$ npm install -g elm-use
Przełącz na starszą lub nowszą wersję wiązu
$ elm-use 0.18 // or whatever version you want to use
Dalsza lektura
Dowiedz się, jak zainicjować i zbudować swój pierwszy projekt.
Witaj świecie
Zobacz, jak skompilować ten kod w Inicjalizuj i buduj
import Html
main = Html.text "Hello World!"
Redakcja
Atom
Lekki stół
Wzniosły tekst
Wigor
Emacs
IntelliJ IDEA
Wsporniki
Kod VS
Zainicjuj i skompiluj
Powinieneś mieć zainstalowaną platformę Elm na swoim komputerze, poniższy samouczek jest napisany z założeniem, że znasz terminal.
Inicjalizacja
Utwórz folder i przejdź do niego za pomocą terminala:
$ mkdir elm-app
$ cd elm-app/
Zainicjuj projekt Elm i zainstaluj podstawowe zależności:
$ elm-package install -y
elm-package.json i folder elm-stuff powinny pojawić się w twoim projekcie.
Utwórz punkt wejścia dla swojej aplikacji Main.elm i wklej do niej przykład Hello World .
Budowanie projektu
Aby zbudować swój pierwszy projekt, uruchom:
$ elm-make Main.elm
Spowoduje to wygenerowanie pliku index.html z plikiem Main.elm (i wszystkimi zależnościami) skompilowanymi w JavaScript i wbudowanymi w HTML. Spróbuj otworzyć w przeglądarce!
Jeśli to się nie powiedzie z błędem, I cannot find module 'Html'. oznacza to, że nie używasz najnowszej wersji Elm. Możesz rozwiązać problem albo poprzez aktualizację Elm i ponowienie pierwszego kroku, albo za pomocą następującego polecenia:
$ elm-package install elm-lang/html -y
Jeśli masz własny plik index.html (np. Podczas pracy z portami), możesz również skompilować pliki Elm do pliku JavaScript:
$ elm-make Main.elm --output=elm.js
Więcej informacji w przykładzie Osadzanie w HTML .
Przewodnik po stylach i format wiązu
Oficjalny przewodnik po stylu znajduje się na stronie głównej i ogólnie dotyczy:
- czytelność (zamiast zwartości)
- łatwość modyfikacji
- czyste różnice
Oznacza to na przykład, że:
homeDirectory : String
homeDirectory =
"/root/files"
evaluate : Boolean -> Bool
evaluate boolean =
case boolean of
Literal bool ->
bool
Not b ->
not (evaluate b)
And b b' ->
evaluate b && evaluate b'
Or b b' ->
evaluate b || evaluate b'
jest uważany za lepszy niż:
homeDirectory = "/root/files"
eval boolean = case boolean of
Literal bool -> bool
Not b -> not (eval b)
And b b' -> eval b && eval b'
Or b b' -> eval b || eval b'
Narzędzie wiąz formacie pomaga formatowania kodu źródłowego dla Ciebie automatycznie (zazwyczaj na SAVE), w podobnym duchu, aby przejść na język gofmt . Ponownie, podstawową wartością jest jeden spójny styl i zapisywanie argumentów i flamewars na różne tematy, takie jak tabulatory vs. spacje lub długość wcięcia .
Możesz zainstalować elm-format zgodnie z instrukcjami na repozytorium Github . Następnie skonfiguruj edytor, aby automatycznie formatował pliki Elm lub uruchom elm-format FILE_OR_DIR --yes ręcznie.
Osadzanie w HTML
Istnieją trzy możliwości wstawienia kodu Elm do istniejącej strony HTML.
Osadzony w znaczniku body
Załóżmy, że skompilowałeś przykład Hello World do pliku elm.js , możesz pozwolić elm.js przejąć znacznik <body> sposób:
<!DOCTYPE html>
<html>
<body>
<script src="elm.js"></script>
<script>
Elm.Main.fullscreen()
</script>
</body>
</html>
OSTRZEŻENIE : Czasami niektóre rozszerzenia chrome nie zgadzają się z <body> co może spowodować przerwanie produkcji aplikacji. Zaleca się, aby zawsze osadzać w konkretnym pliku div. Więcej informacji tutaj .
Osadzanie w Div (lub innym węźle DOM)
Alternatywnie, podając konkretny element HTML, kod Elm można uruchomić w tym konkretnym elemencie strony:
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<div id='app'></div>
<script src="elm.js"></script>
<script>
Elm.Main.embed(document.getElementById('app'))
</script>
</body>
</html>
Osadź jako pracownik sieciowy (bez interfejsu użytkownika)
Kod wiązu można również uruchomić jako proces roboczy i komunikować się przez porty :
<!DOCTYPE html>
<html>
<head>
<title>Hello Worker</title>
</head>
<body>
<script src="elm.js"></script>
<script>
var app = Elm.Main.worker();
app.ports.fromElmToJS.subscribe(function(world) {
console.log(world)
});
app.ports.fromJSToElm.send('hello');
</script>
</body>
</html>
REPL
Dobrym sposobem na poznanie Elm jest próba napisania wyrażeń w REPL (pętla do odczytu i odczytu). Otwórz konsolę w folderze elm-app (utworzonym w fazie inicjalizacji i kompilacji ) i spróbuj wykonać następujące czynności:
$ elm repl
---- elm-repl 0.17.1 -----------------------------------------------------------
:help for help, :exit to exit, more at <https://github.com/elm-lang/elm-repl>
--------------------------------------------------------------------------------
> 2 + 2
4 : number
> \x -> x
<function> : a -> a
> (\x -> x + x)
<function> : number -> number
> (\x -> x + x) 2
4 : number
>
elm-repl jest tak naprawdę dość potężnym narzędziem. Załóżmy, że tworzysz plik Test.elm w folderze elm-app z następującym kodem:
module Test exposing (..)
a = 1
b = "Hello"
Teraz wróć do swojej REPL (która pozostała otwarta) i wpisz:
import Test exposing (..)
> a
1 : number
> b
"Hello" : String
>
Jeszcze bardziej imponujące, jeśli dodasz nową definicję do pliku Test.elm , na przykład
s = """
Hello,
Goodbye.
"""
Zapisz plik, wróć jeszcze raz do REPL i bez ponownego importowania Test nowa definicja jest natychmiast dostępna:
> s
"\nHello,\nGoodbye.\n" : String
>
Jest to bardzo wygodne, gdy chcesz pisać wyrażenia obejmujące wiele wierszy. Bardzo przydatne jest także szybkie testowanie właśnie zdefiniowanych funkcji. Dodaj następujące elementy do pliku:
f x =
x + x * x
Zapisz i wróć do REPL:
> f
<function> : number -> number
> f 2
6 : number
> f 4
20 : number
>
Za każdym razem, gdy modyfikujesz i zapisujesz zaimportowany plik, a następnie wracasz do REPL i próbujesz cokolwiek zrobić, pełny plik jest ponownie kompilowany. Dlatego powie ci o każdym błędzie w twoim kodzie. Dodaj:
c = 2 ++ 2
Spróbuj tego:
> 0
-- TYPE MISMATCH -------------------------------------------------- ././Test.elm
The left argument of (++) is causing a type mismatch.
22| 2 ++ 2
^
(++) is expecting the left argument to be a:
appendable
But the left argument is:
number
Hint: Only strings, text, and lists are appendable.
>
Aby zakończyć to wprowadzenie do REPL, dodajmy, że elm-repl wie również o pakietach, które zainstalowałeś z elm package install . Na przykład:
> import Html.App
> Html.App.beginnerProgram
<function>
: { model : a, update : b -> a -> a, view : a -> Html.Html b }
-> Platform.Program Basics.Never
>
Lokalny serwer kompilacji (Elm Reactor)
Elm Reactor to niezbędne narzędzie do prototypowania aplikacji.
Pamiętaj, że nie będziesz mógł skompilować Main.elm z Elm Reactor, jeśli używasz Http.App.programWithFlags lub Ports
Uruchomienie wiązu w katalogu projektów uruchomi serwer WWW z eksploratorem projektu, który pozwoli Ci skompilować każdy osobny komponent.
Wszelkie zmiany wprowadzone w kodzie są aktualizowane po ponownym załadowaniu strony.
$ elm-reactor # launch elm-reactor on localhost:8000
$ elm-reactor -a=0.0.0.0 -p=3000 # launch elm-reactor on 0.0.0.0:3000