関数型プログラミングを学ぶにあたって、Elmをすすめる理由と、友人にElmを通して関数型プログラミングを布教した結果。
友人にElmを布教してみたNESSM(2022-03-12)sou7 / soukouki
View Slide
sou7のあんなことやこんなこと会津大学学部1年生です。最近はプログラミング言語の仕組みや、その型の仕組みについて興味があります。去年の秋、10人ほど集めてインタプリタを改造する勉強会を開きました。出身 : 千葉県落花生の品種を見た目・香り・味で当てられたり、当てられなかったりします。オオマサリと千葉半立とナカテユタカくらいなら多分行ける・・・!春から、この数年誰も使っていなかった制度を使って、お隣の会津短大の授業を履修してきます。あっちの学食は美味しいのかな?2
MarpはいいぞMarkdown形式でスライドを書きたい!もうWYSIWYG形式で消耗したくない!PowerPointやGoogle Slideのような、編集画面と結果が同じやつ。スライド作成もVSCodeで完結させたい!そんな方におすすめなのがMarpです。今までのLTスライドは全てMarpを使って作成しています。3
各種アカウントTwitter Discord GitHub@sou7_ _ _ sou7#0094 @soukouki4
関数型プログラミングを学んでおく利点まず、Elmを始めとした関数型プログラミング言語(以下関数型言語)について学ぶメリットを挙げます。1. 副作用を扱わないプログラムを作るのに慣れられる。関数型言語では、副作用を狭い範囲にとどめたり、あるいは扱わないような仕組みになっています。副作用を扱わないことで、プログラムの流れが解りやすくなったり、テストが容易にできたりします。関数型パラダイムを学ぶことで、設計の幅を広げられると考えます。2. 関数型言語的な機能を利用することに慣れられる。RustやSwiftなど、関数型を含むマルチパラダイムを指向した言語が人気になっています。関数型言語的な機能に慣れることで、それらの言語を更に活用できるようになります。 5
Elmは関数型言語の第一歩におすすめElmは、その関数型言語を初めて学ぶ人にとって良い言語だと考えます。1. 簡潔な言語仕様2. 副作用を排除した言語設計3. 豊富なエコシステムそれぞれについて順番に説明していきます。6
1. 簡潔な言語仕様驚くことに、Elmはバージョンを重ねるごとに機能を削減しています。v0.18では関数の中置記法が、v0.19ではユーザー定義演算子の機能が削減されています。削減に残るようなElmの言語仕様は必要最低限かつ、それぞれが強力になっています。また、ElmはLispのように独特な文法を持つこともなく、他のメジャーな言語と似た文法で扱えます。この簡潔さによって、言語の習得がとても簡単になっています。十分な知識を持っている人であれば、後で述べるように1日でほぼすべての文法を使えるようになります。7
2. 副作用を排除した言語設計関数型言語を学ぶにあたって、副作用を排除したプログラミングに慣れる必要があります。Elmでは、副作用は正規の手段では扱えないようになっています。Elmを学ぶことで、副作用を扱わないプログラミングを半ば無理やり身に付けられます。8
3. 豊富なエコシステムElmを利用してプログラミングをするにあたって、きちんとした開発環境が揃っています。ライブラリのインストールもコマンド一つで行えますし、機能の豊富なエディタ拡張を利用してスムーズにプログラミングができます。パッケージマネージャーフォーマッターエディタ拡張ユニットテストライブラリ文法やライブラリを学ぶのに適したチュートリアル9
Elmを学ぶために必要な知識ここまでElmの利点を並べてきましたが、実際Elmを学ぶために必要な、基礎的な知識も複数あります。1. 最低限のHTMLの知識Elmはフロントエンド開発用の言語であり、最低限のHTMLタグの知識は必要です。2. 静的型付けプログラミング言語の経験Elmは静的型付けであり、関数を組み合わせるときに型を意識したり、あるいはエラーメッセージを読み取る技術が必要です。ちなみに、JavaScriptのコードを書いた経験は無くてもどうにかなります。(本人談)10
友人にElmを布教してみた犠牲者はしんぶんぶん(shinbunbun.info)くんで、学ぶ内容は以下のようになりました。Elmを2日かけて学び、関数型パラダイムを把握する。1日でElmの文法を把握する。公式ドキュメントのリンクを渡して、デモを含めて改造させてみる。そのあと1日で何かWebアプリケーションを作成してみる。RustやScalaなど、大規模なマルチパラダイム言語に挑む。彼は関数型パラダイムの経験さえないものの、他の静的型付け言語の経験は十分あり、またフロントエンド開発の経験も多くありました。11
結果:Elmは2日で学べる結果から言うと、しんぶんぶんくんは見事に2日でアプリケーションを作ってきました。もちろん彼の努力や、彼の今までの経験に依る部分も大きいと思うのですが、Elmの文法の小ささも重要な要因だと考えます。また彼以外にも、異なる人が行った2時間の勉強会x4回と、1日の作成期間でアプリケーションを作成した人何人か居ます。12
学習向けリンク集https://guide.elm-lang.jpElmを扱うためのガイドで、基礎的な知識を得られます。https://elm-lang.org/examplesElmによるアプリケーションの例がいくつかあり、これを元に改造したりしました。https://package.elm-lang.orgElmのパッケージのドキュメントです。13
まとめ最近になって、関数型プログラミング言語を学ぶ利点が増えている。関数型プログラミングを学ぶために、Elmはいくつかの理由により適している。i. 簡潔な言語仕様ii. 副作用を排除した言語設計iii. 豊富なエコシステムしんぶんぶんくんを始めとして、Elmは2日あれば学べる。14