過去にF#の記事を読んだ時はコードの読みがたさだけが印象に残っているだけで、自分にはあまり有用であるとは思えませんでした。

ググってみると、Visual Studio 2010から標準搭載されたとあります。10年近く前ですね。
ここ最近では Visual Studio 2017でも公式サポートという話もありました。

私の周囲では全く話題に上らないですが、ある一冊の本との出会いから、関数型プログラミングはマイブームとなっています。

関数型プログラミングの機運の高まり

「関数型プログラミング メリット」などのキーワードでググってみると、その有用性については色々な方が説明しているので、ここでは特に書きません。
わたし自身はまだ始めて1か月ほどなので、語れるような言葉を持っていない というのが実際のところです。

F#を始めようと思った最大のきっかけは、以下の書籍との出会いからです。

JavaScript関数型プログラミング - 複雑性を抑える発想と実践法を学ぶ (Amazon)

JavaScript じゃん!

と、ツッコミを頂きそうですが、JavaScriptは 関数が第一級オブジェクト という特徴からその気になれば関数型プログラミングが可能な言語です。
ここでは紹介しませんが、同様のコンセプトで書かれた書籍は他にも何冊かあるようです。
JavaScriptすごい!

普段は業務系SEとしてC#やVB.NETを使っている私が「F#やってみるか」と思えるほど、上記の本は読んでいて面白かったのでオススメします(誰に...)。
技術書なので少々高いですけど。

この書籍に出会う前の私が関数型プログラミングに全く触れていなかったかと言えば、そうでは無いように思えます。昨今ではC#のような手続き型の言語を使っていても、関数型プログラミングの考え方の一部が随所に入り込んで来ています。

コレクションをループ構文ではなく LINQ to Object を用いて操作するのは既に当たり前になっていますし、Webアプリケーションを作成するためにJavaScriptをよく使うようになってからは、C#でも ActionFunc デリゲートを自然に使うようになりました。

10年前のF#の記事に有用性を見い出せなかった私ですが、今になって機運が高まってきました。

F#に触れてみた感想

残念ながら、仕事でF#を使う機会はまず無いでしょう。

なぜかというと、流行っていない。これにつきます。

なぜ流行らないのでしょうねぇ。
ざっと触ってみた感じでは、記述が非常に短く出来て気に入ってます。
.NETの言語のひとつなので出来ることもC#と変わらないし。

流行らない理由をちょっと考えてみたのですが、かねてから感じていた持論に行きつきました。

「プログラミングは文系向き」

異論!反論!オブ〇〇〇ション!

かくいう私自身は間違いなく文系脳の持ち主です。
高校の物理のテストで赤点を取った時、先生に呼ばれて「おまえは考え方は全て合っているのに、全問計算ミスだ」と言われたほどの文系脳の持ち主です。

そんな私がIT業界に25年以上従事してきて、50歳を目前にしているのに現役プログラマとしてもやっていられるのは「プログラミングは文系向き」だからではないでしょうか!

手続き型言語は、処理の手順を細かく記述する必要があります。
あれをしてー、これをしてー、それをやるためにこれを書いて~。で、結局なにをしたい んだっけ...。
ということになりがちなので、コーディングを開始する前に 詳細設計書 という名の「処理手順が記載されたドキュメント」を作成したりします。

設計書とかの話は、このまま続けるととても長くなりそうなので割愛しますが、手続き型言語はこの「処理手順の記述」の仕方が人によってマチマチになります。
読みやすいものもあれば、そうでないものも沢山あります。
コンパイルして動作させるにはどちらでも構わないのですが、後の保守を考えると、読みやすく簡潔に書く必要があります。

これに必要な能力は文章記述能力であり、私の持論の「文系向き」ということにつながります。

でも、F#に触れて見て、この持論を少々修正する必要を感じました。

手続き型プログラミングは文系向き」

異論!反論!オ〇ジェ〇ション! もうええて

手続き型 という語を付け加えたのは、関数型(宣言型)プログラミングにはあてはまらないかもなぁという感想からです。

F#の世界には、宣言 しかありませんでした。 が見当たりません。
コンピュテーション式という手続き型の要素もあるにはあるのですが、主要な要素ではありません。式という語が付いていますし。

で、これが流行らない理由のひとつかなと思います。

理系脳(というか数学脳?数式脳?)が必要なので、求められる能力がこれまでのIT業界(業務系)の人材とは違うのかも...と。

でも、F#、書いていて楽しいです。

コンパイルを通すまではそれなりの苦労がありますが、通ってしまえばほぼ想定通りに動作する。
実行時例外、なにそれ?な、この感覚はちょっと新鮮です。
(実行時例外が全く起きないということではありません。)

使いこなせば、工数削減になりそうです。

本サイトの開発には積極的に使っていこうと思ってます。