Save 37% off PRO during our Black Friday Sale! »

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

24f2b4b72c52a14b1d863a6731734f69?s=47 soukouki
July 10, 2021
92

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

Zli大LTのLTスライドです。

フロントエンド開発の選択肢にElmを入れてもらうことを目標として発表しました。

24f2b4b72c52a14b1d863a6731734f69?s=128

soukouki

July 10, 2021
Tweet

Transcript

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

  2. 自己紹介 29期生で学部1年の sou7 / soukouki です。 twitter:@sou7___ (アンダーバーは3つ!) discord:sou7#0094 github:soukouki

    atcoder:soukouki atcoder茶色です。 大学入ってからというもの、周りにすごい人が多くて刺 激されてます。 みんなすごい!
  3. Elmってなんぞ? JavaScriptにコンパイルできる関数型プログラミング言語です。 主に フロントエンド (Webブラウザに表示される部分の開発)で使います。 今回は、そんなElmのすごいところについて話していきたいと思います!

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

  5. Maybe型 みなさんは Exception in thread "main" java.lang.NullPointerException AttributeError: 'NoneType' object

    has no attribute 'func' NoMethodError (undefined method `func' for nil:NilClass) これらのようなエラーを見て台パンしたことが、きっとあると思います。 ですが、なんとElmではこれらのエラーと おさらば できます!
  6. type Maybe a = Just a | Nothing Elmでは、nullポインターのようなものを使わず、型で表現します。 型で表現するので、もしnullポインターの処理を忘れても、コンパイル時に教えて

    くれます。 ScalaやRustのオプション型、Kotlinのnull許容型と同じようなものです。 https://github.com/elm/core/blob/master/src/Maybe.elm#L39
  7. Result型 例外を持つ言語でプログラムを書いているとき、例外はどこから出てきてプログラム のフローを破壊するか予想できません。まるでミサイルです。 例外を一つ残らず的確に処理することはほぼ不可能であり、たくさんのバグを引き起 こします。 しかし、Elmではこれらとも おさらば できます!

  8. type Result error value = Ok value | Err error

    Elmではこれも型で表現します。型で表現するので、エラーが発生するかもしれない関 数でエラー処理を忘れても、コンパイル時に教えてくれます。 ScalaのEither型、RustのResult型と同じ感じです。 https://github.com/elm/core/blob/master/src/Result.elm#L32
  9. 型システムによるランタイムエラーの排除 これらの仕組みにより、Elmでは実用上 ランタイムエラーが発生しません。 ランタイムエラーを起こさないように関数が設計されているため、コンパイルを通す だけで動くプログラムが作れます(例外あり)。 そのため、延々と続くデバッグ作業ともこれでおさらば できます。

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

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

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

  13. The Elm Architecture 副作用のある処理も書けない、乱数を生成する 関数もない、そんな純粋関数型言語でどうやっ てWebアプリを開発するのか、疑問に思う人も いると思います。 それを解決するのが The Elm

    Architecture (TEA) です。 今回は時間の関係から詳しい説明は割愛しま す。
  14. Elmでマインスイーパー作った話 一日弱かけてマインスイーパーを作ってみました! https://soukouki.github.io/minesweeper-elm/ このように、頻繁に状態を変更する必要のあるゲームの ようなアプリでも、Elmはらくらくとこなしてくれま す。

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