Top Banner
ELM - FUNKCIONÁLNÍ NEBE PRO WEBOVÉ VÝVOJÁŘE Tomáš Látal Barcamp Hradec Králové 2016
27

Elm - Funkcionální nebe pro webové vývojáře

Jan 22, 2018

Download

Software

Tomáš Látal
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Elm - Funkcionální nebe pro webové vývojáře

ELM - FUNKCIONÁLNÍ NEBE PRO WEBOVÉ VÝVOJÁŘE

Tomáš LátalBarcamp Hradec Králové 2016

Page 2: Elm - Funkcionální nebe pro webové vývojáře

CODERETREAT

• “Do příště se naučím nový programovaní jazyk”

• Funkcionální

• Clojure / F# / Elm

Page 3: Elm - Funkcionální nebe pro webové vývojáře

ELM - CO SE MI LÍBILO

• FP pro web - kompilace do JS

• Virtual DOM (React)

• One-way data flow (Redux)

• Typy

Page 4: Elm - Funkcionální nebe pro webové vývojáře

ELM - CO BYLO NOVÉ

• Pouze Immutable

• Pouze Stateless (Pure) funkce

• No Runtime Exceptions

Page 5: Elm - Funkcionální nebe pro webové vývojáře

POROVNÁNÍ RYCHLOSTÍhttp://elm-lang.org/blog/blazing-fast-html-round-two

Page 6: Elm - Funkcionální nebe pro webové vývojáře

ELM - ÚVOD

Page 7: Elm - Funkcionální nebe pro webové vývojáře

HISTORIE

• 2012 - Evan Czaplicky

• inspirováno Haskellem

• v0.17

• v0.18 (cca listopad 2016)

Page 8: Elm - Funkcionální nebe pro webové vývojáře

SYNTAXE1 + 1 -- 28 - 1 -- 710.5 * 2 -- 21

33 / 2 -- 16.5 s reálným dělením33 // 2 -- 16 s celočíselným dělením

not True -- Falsenot False -- True1 == 1 -- True1 /= 1 -- False1 < 10 -- True

"Text"'a'

"Ahoj " ++ "světe!" -- "Ahoj světe!"

https://learnxinyminutes.com/docs/cs-cz/elm/

Page 9: Elm - Funkcionální nebe pro webové vývojáře

STRUKTURY

["jedna", "dva", "fizz", "čtyři"][1, 2, 3, 4, 5][1..5]

List

("elm", 42)

Tuple (n-tice)

Page 10: Elm - Funkcionální nebe pro webové vývojáře

STRUKTURYRecord

pocatek = { x = 0, y = 0, z = 0 }

{ x = 3, y = 7 }.x -- 3 .y { x = 3, y = 7 } -- 7

Přístup k datům

{ osoba | jmeno = "Jiří" }

Změna hodnoty

Page 11: Elm - Funkcionální nebe pro webové vývojáře

ŘÍDÍCÍ STRUKTURYif n < 0 then "n je záporné"else if n > 0 then "n je kladné"else "n je nula"

case seznam of [] -> "prázdný" [x]-> “pouze s jednou položkou " ++ toString x x::xs -> “více prvků, první je " ++ toString x

Page 12: Elm - Funkcionální nebe pro webové vývojáře

FUNKCEvynasob a b = a * b

vynasob 7 6 -- 42

zdvoj = vynasob 2

List.map zdvoj [1..4] -- [2, 4, 6, 8]

Page 13: Elm - Funkcionální nebe pro webové vývojáře

FUNKCE

objem {sirka, delka, hloubka} = let obsah = sirka * delka in obsah * hloubka

objem { sirka = 3, delka = 2, hloubka = 7 } -- 42

Page 14: Elm - Funkcionální nebe pro webové vývojáře

FUNKCE

fib n = if n < 2 then 1 else fib (n - 1) + fib (n - 2)

List.map fib [0..8] -- [1, 1, 2, 3, 5, 8, 13, 21, 34]

Page 15: Elm - Funkcionální nebe pro webové vývojáře

FUNKCEList.filter (\num -> num < 15) (List.map fib [0..8]) -- [1, 1, 2, 3, 5, 8, 13]

[0..8] |> List.map fib |> List.filter (\num -> num < 15)

Page 16: Elm - Funkcionální nebe pro webové vývojáře

TYPY5 : Int6.7 : Float"ahoj" : StringTrue : Bool

type alias Bod3D = { x : Float, y : Float, z : Float }

Page 17: Elm - Funkcionální nebe pro webové vývojáře

TYPY U FUNKCÍfib : Int -> Intfib n = if n < 2 then 1 else fib (n - 1) + fib (n - 2)

List.map : (a -> b) -> List a -> List b

List.map fib [0..8] -- [1, 1, 2, 3, 5, 8, 13, 21, 34]

Page 18: Elm - Funkcionální nebe pro webové vývojáře

UNION TYPYtype Smer = Sever | Jih | Vychod | Zapad

naStupne : Smer -> FloatnaStupne smer = case smer of Sever -> 0.0 Vychod -> 90.0 Jih -> 180.0 Zapad -> 210.0

Page 19: Elm - Funkcionální nebe pro webové vývojáře

ELM ARCHITECTURE

• Model - stav aplikace

• Update - aktualizuje Model

• View - vykresluje Model (HTML/SVG)

Page 20: Elm - Funkcionální nebe pro webové vývojáře

COUNTER - MODEL

-- MODEL

type alias Model = Int

model : Model model = 0

Page 21: Elm - Funkcionální nebe pro webové vývojáře

COUNTER - UPDATE-- UPDATE type Msg = Increment | Decrement

update : Msg -> Model -> Model update msg model = case msg of Increment -> model + 1

Decrement -> model - 1

Page 22: Elm - Funkcionální nebe pro webové vývojáře

COUNTER - VIEW

-- VIEW

view : Model -> Html Msg view model = div [] [ button [ onClick Decrement ] [ text "-" ] , div [] [ text (toString model) ] , button [ onClick Increment ] [ text "+" ] ]

Page 23: Elm - Funkcionální nebe pro webové vývojáře

COUNTER - MAIN

main = App.beginnerProgram {model = model

,view = view ,update = update }

Page 24: Elm - Funkcionální nebe pro webové vývojáře

DEMO

Page 25: Elm - Funkcionální nebe pro webové vývojáře

TOOLS

• Package manager

• Reactor

• Time-traveling debugger

• Elm format

Page 26: Elm - Funkcionální nebe pro webové vývojáře

CO MI ELM DAL

• Píšu víc Pure funkcí

• Snažím se pokrýt rovnou všechna větvení programu

• Z funkcí nevracím null

• Nebojím se FP jazyků

Page 27: Elm - Funkcionální nebe pro webové vývojáře

DÍKY ZA POZORNOST

http://elm-lang.org

@TomasLatal