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 のすすめ ~ Elmはとてもいい言語なのでみんな使ってみましょう! ~
Search
soukouki
July 10, 2021
0
330
純粋関数型言語 Elm のすすめ ~ Elmはとてもいい言語なのでみんな使ってみましょう! ~
Zli大LTのLTスライドです。
フロントエンド開発の選択肢にElmを入れてもらうことを目標として発表しました。
soukouki
July 10, 2021
Tweet
Share
More Decks by soukouki
See All by soukouki
自作Cコンパイラ 8時間の奮闘
soukouki
0
1.1k
定理証明支援系Coq(セキュリティキャンプLT会)
soukouki
1
150
Coqで選択公理を形式化してみた
soukouki
0
230
「プログラミング」と「数学」の関係 〜カリー・ハワード同系対応と定理証明支援系Coq〜
soukouki
1
120
型クラスと依存型のカルパッチョ、代数的構造を添えて
soukouki
2
490
Coqのコントリビューターになった話
soukouki
0
160
次に流行る※プログラミング言語「Lean」
soukouki
2
1.5k
証明しながらプログラミング! - タクティックによるCoqプログラミング
soukouki
0
230
帰納型とパターンマッチングの紹介
soukouki
0
130
Featured
See All Featured
Speed Design
sergeychernyshev
25
670
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
It's Worth the Effort
3n
183
28k
How to Ace a Technical Interview
jacobian
276
23k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
0
99
GitHub's CSS Performance
jonrohan
1030
460k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
A Tale of Four Properties
chriscoyier
157
23k
Scaling GitHub
holman
458
140k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Transcript
純粋関数型言語 Elm のすすめ ~ Elmはとてもいい言語なのでみんな使ってみましょう! ~
自己紹介 29期生で学部1年の sou7 / soukouki です。 twitter:@sou7___ (アンダーバーは3つ!) discord:sou7#0094 github:soukouki
atcoder:soukouki atcoder茶色です。 大学入ってからというもの、周りにすごい人が多くて刺 激されてます。 みんなすごい!
Elmってなんぞ? JavaScriptにコンパイルできる関数型プログラミング言語です。 主に フロントエンド (Webブラウザに表示される部分の開発)で使います。 今回は、そんなElmのすごいところについて話していきたいと思います!
Elmの型システム Elmの重要な要素の一つに、型システムがあります。 ElmはCやJavaと同じ静的型付け言語ですが、Elmでは更に 強力に、便利に 使えるよ うになっています。
Maybe型 みなさんは Exception in thread "main" java.lang.NullPointerException AttributeError: 'NoneType' object
has no attribute 'func' NoMethodError (undefined method `func' for nil:NilClass) これらのようなエラーを見て台パンしたことが、きっとあると思います。 ですが、なんとElmではこれらのエラーと おさらば できます!
type Maybe a = Just a | Nothing Elmでは、nullポインターのようなものを使わず、型で表現します。 型で表現するので、もしnullポインターの処理を忘れても、コンパイル時に教えて
くれます。 ScalaやRustのオプション型、Kotlinのnull許容型と同じようなものです。 https://github.com/elm/core/blob/master/src/Maybe.elm#L39
Result型 例外を持つ言語でプログラムを書いているとき、例外はどこから出てきてプログラム のフローを破壊するか予想できません。まるでミサイルです。 例外を一つ残らず的確に処理することはほぼ不可能であり、たくさんのバグを引き起 こします。 しかし、Elmではこれらとも おさらば できます!
type Result error value = Ok value | Err error
Elmではこれも型で表現します。型で表現するので、エラーが発生するかもしれない関 数でエラー処理を忘れても、コンパイル時に教えてくれます。 ScalaのEither型、RustのResult型と同じ感じです。 https://github.com/elm/core/blob/master/src/Result.elm#L32
型システムによるランタイムエラーの排除 これらの仕組みにより、Elmでは実用上 ランタイムエラーが発生しません。 ランタイムエラーを起こさないように関数が設計されているため、コンパイルを通す だけで動くプログラムが作れます(例外あり)。 そのため、延々と続くデバッグ作業ともこれでおさらば できます。
Elmは純粋関数型言語 Elmは純粋関数型言語です。純粋関数型言語では、同じ引数で関数を呼び出すと必ず同 じ値が返ります。また、副作用のある処理は書くことができません。 これらの制約は、関数型言語を学ぶ上でとっつきづらく感じるかもしれません。しか し、これらの制約のおかげで、たくさんの恩恵を受けられます。
関数を簡単に理解できる 関数は引数からしか値を受け取れず、また戻り値からしか値を返せません。そのた め、処理の内容を把握するためには 関数本体と引数だけを理解 すればいいので す。 普段の開発でも影響範囲を小さくし、読みやすいプログラムを書くように気をつけて いる人は多いと思います。しかしElmの開発では、言語仕様の面からこれを強制されま す。 そのおかげで
常にコードをきれいな状態に保てます。
テストが簡単に書ける 純粋関数型言語では、関数は同じ引数を渡すと、必ず同じ結果が帰り、また、戻り値 からしか処理結果を返さないことが保証されます。そのため、関数のテストを簡単 に書けます。 しかも、言語レベルで固められているため、テストしたい関数の中に乱数生成のよう な処理を入れたためにテストが書けない、なんていうことも防げます。
The Elm Architecture 副作用のある処理も書けない、乱数を生成する 関数もない、そんな純粋関数型言語でどうやっ てWebアプリを開発するのか、疑問に思う人も いると思います。 それを解決するのが The Elm
Architecture (TEA) です。 今回は時間の関係から詳しい説明は割愛しま す。
Elmでマインスイーパー作った話 一日弱かけてマインスイーパーを作ってみました! https://soukouki.github.io/minesweeper-elm/ このように、頻繁に状態を変更する必要のあるゲームの ようなアプリでも、Elmはらくらくとこなしてくれま す。
おわりに Elmの型システムや関数型言語の仕組みを使うことで、安全に簡潔に開発を進めら れます。これは大きく複雑なシステムを作るとき、とても大きなメリットになりま す。 また、関数型言語を初めて触る際の選択肢 として、Elmはいいと思います。ぜ ひ、みなさんもElmを勉強し、関数型言語の世界への第一歩を歩んでみてください。