Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Elmで関数型を意識する / Think functionally with Elm
Search
mather
June 26, 2018
Programming
440
0
Share
Elmで関数型を意識する / Think functionally with Elm
ElmとVue.jsを比較しながら関数型言語によるエクササイズをおすすめする。
mather
June 26, 2018
More Decks by mather
See All by mather
数学勉強会へのいざない
mather
0
59
SolidjsでLeacTion!を作り直しました / Rebuilt LeacTion! in Solid.js
mather
0
350
Webフレームワークの功罪 / Advantages and considerable point of Web Frameworks
mather
0
500
LeacTion!のアップデートとプチ勉強会へのいざない / Updates of LeacTion and Petit Meetup
mather
0
530
LeacTion!について / About LeacTion!
mather
0
350
Rubyでワンライナー / One-liner on Ruby
mather
0
490
認知と思考パターン / Cognition and Pattern
mather
1
310
「モデル」を考える / Think about "model"
mather
0
400
Shall we make a speech?
mather
0
260
Other Decks in Programming
See All in Programming
Modding RubyKaigi for Myself
yui_knk
0
310
プラグインで拡張される Context をtype-safe にする難しさと設計判断
kazupon
2
210
SkillsをS3 Filesに置く時のあれこれ
watany
3
1.7k
AlarmKitで明後日起きれるアラームアプリを作る
trickart
0
140
ローカルLLMでどこまでコードが書けるか / How much code can be written on a local LLM
kishida
2
380
iOS26時代の新規アプリ開発
yuukiw00w
0
160
AgentCore Optimizationを始めよう!
licux
3
260
Agent Skills を社内で育てる仕組み作り
jackchuka
1
2.2k
~ 秘伝のタレ化した『神スプシ』と戦う ~ 関数型パラダイムで壊れない仕組みへ
h0r15h0
1
120
Kubernetesを使わない環境にもCloud Nativeなデプロイを実現する / Enabling Cloud Native deployments without the complexity of Kubernetes
linyows
3
430
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
580
権限チェックの一貫性を型で守る TypeScript による多層防御
mnch
3
200
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
What's in a price? How to price your products and services
michaelherold
247
13k
Navigating Team Friction
lara
192
16k
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
How to Talk to Developers About Accessibility
jct
2
200
New Earth Scene 8
popppiees
3
2.2k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
370
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
200
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
230
Facilitating Awesome Meetings
lara
57
6.9k
Site-Speed That Sticks
csswizardry
13
1.2k
Transcript
ElmͰ ؔܕΛҙࣝ͢Δ 2018-06-26 ܂ാӳࢿ
ࣗݾհ • ܂ാӳࢿ(͘Θ͍͚ͨ͑͢) • גࣜձࣾΞϥλφ • Node.jsNuxt.jsͰπʔϧ࡞ͬͨΓ • ͖ͳݴޠScala, Haskell
• झຯɿμΠϏϯάɺυϩʔϯɺֶ
None
Elmͬͯͳʹʁ
http://elm-lang.org/
Elm • ؔܕϑϩϯτΤϯυݴޠ • ੩తܕ͚ • Elm Architecture • ֎෦JSͱͷΓऔΓՄೳ
example
ೖྗͱΧϯτΞοϓ • Elm൛ • https://ellie-app.com/BMTPN4b5kfa1 • Vue.js൛ʢόά͋Γʣ • https://codepen.io/anon/pen/PaBOWm
શମߏࣅ͍ͯΔ WJFX NPEFM VQEBUF )5.-5FNQMBUF EBUB NFUIPET Elm Vue.js ΞϓϦέʔγϣϯͷߏ্͍͍ͩͨಉ͡ʹͳΔ
ܕΛҙࣝ͢Δ type alias Model = { count : Int ,
incr : Int } initialModel : Model initialModel = { count = 0 , incr = 0 } data: { count: 0, incr: 0 } ҟͳΔܕͷΛೖྗͰ͖ͳ͍ɺଐੑΛՃͰ͖ͳ͍
ܕΛҙࣝ͢Δ — アクションを受けて — モデルを次の値に更新する関数 update : Msg -> Model
-> Model — 起こりうるアクションの型 type Msg = Increment | UpdateIncr String methods: { increment() { this.value += this.incr } } ΞΫγϣϯͷͱݱࡏͷϞσϧͷ͔Β ࣍ͷϞσϧͷঢ়ଶ͕Ұҙʹܾ·Δ
ܕΛҙࣝ͢Δ view : Model -> Html Msg view model =
div [] [ input [ onInput UpdateIncr ] [] , button [ onClick Increment ] [ text "増加" ] , div [] [text <| toString model.count] ] ModelҎ֎ͷঢ়ଶมແ͍
ࢀরಁաੑΛҙࣝ͢Δ • ೖྗͱग़ྗͷܕͰࢀরಁաੑΛҡ࣋ • ݱࡏ࣌ࠁऔಘͳͲ෭࡞༻ͷ͋Δؔ͋Δ • ಛผѻ͍͕ඞཁ • ίϯύΠϧ͕௨Εܕͷҧ͍ʹΑΔόά͕ແ ͍͜ͱ͕อূͰ͖Δ
Elmͷ͍ॴ • ܕΛ͖ͬͪΓҙࣝͯ͠όάͷͳ͍ΞϓϦέʔγϣ ϯΛ࡞Δͱ͖ • ୈҰڃؔͷѻ͍Λͬͱચ࿅͍ͤͨ͞ͱ͖ • JavaScriptͰͬͱ៉ྷͳίʔυΛॻͨ͘Ί • ϥϑͳͷ͍͍͚Ͳɺͨ·ʹυMʹͳΓ͍ͨͱ͖
ElmΦεεϝͰ͢ɻ
͋Γ͕ͱ͏͍͟͝·ͨ͠