Slide 1

Slide 1 text

純粋関数型言語 Elm のすすめ ~ Elmはとてもいい言語なのでみんな使ってみましょう! ~

Slide 2

Slide 2 text

自己紹介 29期生で学部1年の sou7 / soukouki です。 twitter:@sou7___ (アンダーバーは3つ!) discord:sou7#0094 github:soukouki atcoder:soukouki atcoder茶色です。 大学入ってからというもの、周りにすごい人が多くて刺 激されてます。 みんなすごい!

Slide 3

Slide 3 text

Elmってなんぞ? JavaScriptにコンパイルできる関数型プログラミング言語です。 主に フロントエンド (Webブラウザに表示される部分の開発)で使います。 今回は、そんなElmのすごいところについて話していきたいと思います!

Slide 4

Slide 4 text

Elmの型システム Elmの重要な要素の一つに、型システムがあります。 ElmはCやJavaと同じ静的型付け言語ですが、Elmでは更に 強力に、便利に 使えるよ うになっています。

Slide 5

Slide 5 text

Maybe型 みなさんは Exception in thread "main" java.lang.NullPointerException AttributeError: 'NoneType' object has no attribute 'func' NoMethodError (undefined method `func' for nil:NilClass) これらのようなエラーを見て台パンしたことが、きっとあると思います。 ですが、なんとElmではこれらのエラーと おさらば できます!

Slide 6

Slide 6 text

type Maybe a = Just a | Nothing Elmでは、nullポインターのようなものを使わず、型で表現します。 型で表現するので、もしnullポインターの処理を忘れても、コンパイル時に教えて くれます。 ScalaやRustのオプション型、Kotlinのnull許容型と同じようなものです。 https://github.com/elm/core/blob/master/src/Maybe.elm#L39

Slide 7

Slide 7 text

Result型 例外を持つ言語でプログラムを書いているとき、例外はどこから出てきてプログラム のフローを破壊するか予想できません。まるでミサイルです。 例外を一つ残らず的確に処理することはほぼ不可能であり、たくさんのバグを引き起 こします。 しかし、Elmではこれらとも おさらば できます!

Slide 8

Slide 8 text

type Result error value = Ok value | Err error Elmではこれも型で表現します。型で表現するので、エラーが発生するかもしれない関 数でエラー処理を忘れても、コンパイル時に教えてくれます。 ScalaのEither型、RustのResult型と同じ感じです。 https://github.com/elm/core/blob/master/src/Result.elm#L32

Slide 9

Slide 9 text

型システムによるランタイムエラーの排除 これらの仕組みにより、Elmでは実用上 ランタイムエラーが発生しません。 ランタイムエラーを起こさないように関数が設計されているため、コンパイルを通す だけで動くプログラムが作れます(例外あり)。 そのため、延々と続くデバッグ作業ともこれでおさらば できます。

Slide 10

Slide 10 text

Elmは純粋関数型言語 Elmは純粋関数型言語です。純粋関数型言語では、同じ引数で関数を呼び出すと必ず同 じ値が返ります。また、副作用のある処理は書くことができません。 これらの制約は、関数型言語を学ぶ上でとっつきづらく感じるかもしれません。しか し、これらの制約のおかげで、たくさんの恩恵を受けられます。

Slide 11

Slide 11 text

関数を簡単に理解できる 関数は引数からしか値を受け取れず、また戻り値からしか値を返せません。そのた め、処理の内容を把握するためには 関数本体と引数だけを理解 すればいいので す。 普段の開発でも影響範囲を小さくし、読みやすいプログラムを書くように気をつけて いる人は多いと思います。しかしElmの開発では、言語仕様の面からこれを強制されま す。 そのおかげで 常にコードをきれいな状態に保てます。

Slide 12

Slide 12 text

テストが簡単に書ける 純粋関数型言語では、関数は同じ引数を渡すと、必ず同じ結果が帰り、また、戻り値 からしか処理結果を返さないことが保証されます。そのため、関数のテストを簡単 に書けます。 しかも、言語レベルで固められているため、テストしたい関数の中に乱数生成のよう な処理を入れたためにテストが書けない、なんていうことも防げます。

Slide 13

Slide 13 text

The Elm Architecture 副作用のある処理も書けない、乱数を生成する 関数もない、そんな純粋関数型言語でどうやっ てWebアプリを開発するのか、疑問に思う人も いると思います。 それを解決するのが The Elm Architecture (TEA) です。 今回は時間の関係から詳しい説明は割愛しま す。

Slide 14

Slide 14 text

Elmでマインスイーパー作った話 一日弱かけてマインスイーパーを作ってみました! https://soukouki.github.io/minesweeper-elm/ このように、頻繁に状態を変更する必要のあるゲームの ようなアプリでも、Elmはらくらくとこなしてくれま す。

Slide 15

Slide 15 text

おわりに Elmの型システムや関数型言語の仕組みを使うことで、安全に簡潔に開発を進めら れます。これは大きく複雑なシステムを作るとき、とても大きなメリットになりま す。 また、関数型言語を初めて触る際の選択肢 として、Elmはいいと思います。ぜ ひ、みなさんもElmを勉強し、関数型言語の世界への第一歩を歩んでみてください。