Elmで遊んでみた
普段仕事ではバックエンド寄りの開発をメインにしているけれど、少しWebフロントエンドも知っておかないといけない状況になった。Rust好きおじさんなのでYewを勉強しようかと迷ったけど、以前から気になっていたElmに入門してみることにした。
やったこと
- 公式ガイド(日本語翻訳版) を読みながら写経した(3h)
- 仕事で開発したAPIの結果(JSON)を受信して表示するだけの簡単なWebアプリを2つほど作ってみた(1.5日)
- Project Eulerを解いてブラウザ上で結果を表示するWebアプリを作成した(1日)
できたもの
以前から、新たにプログラミング言語を学習するときはProject Eulerの問題を解くことにしている。手続き型言語であればfor
ループで書けばいいところを関数型言語では再帰を使わなければならないなど、同じ問題でも記述方法が異なったりして楽しい。
それで、Elmの場合は言語自体がWebフレームワークと言ってもよいので、ブラウザ上で動作するものを書かねばなるまいと思い、問題番号のボタンをクリックすることで計算処理を実行し結果を表示するようにした。
しかし一番作るときに大変だったのは、新しい問題を追加するときにコード生成させるシェルスクリプト(add.sh
)を実装するところだったりして…。
つまずいた点
- ElmはHaskell同様遅延評価だと思っていたら正格評価だった。Project Eulerの問題は最初からパラメータは与えられているので引数なしの関数にしたら(つまりはほぼ定数)、ページロード時に計算処理が走るようになってしまって起動が重くなった。
- 切り捨て除算(
(//)
)を行ったときに整数が32ビットに切り詰められる動作で計算が合わずハマった
Elmのいいところ
- The Elm Architecture(TEA)で言語ランタイム側が面倒なメッセージングなどを引き受けてくれるのでシンプルにコードを書ける
- Haskellでコードを書いた経験が少しあったので言語仕様にとっつきやすかった
- パイプライン演算子は、Elixirのパイプ演算子やClojureのスレッディングマクロと同じように使えるのでこれらも記述がシンプルになりありがたい
- エディタ(IntelliJ IDEA)で、保存時に
elm-format
にフォーマットかけるように設定していたらガツガツコードフォーマットが変わっていくのが気持ちいい
万人にとっての良さというより、自分にとっての良さの列挙になってしまった…
さいごに
良いお年を!