近頃、関数型プログラミングについて目にすることが多いですね。私もScalaを触っていることもあり、あらためて少し調べてみました。
関数型プログラミングと言う以上、ソースコードが基本的に関数で構成されるのが、大きな特徴です。関数で構成されているとは、得られる結果は渡した引数のみに依存するということです。通常のプログラミング言語(命令型と呼ばれている)との違いは、下記の記事にまとめられています。
【関数型プログラミング】
https://tech.nikkeibp.co.jp/atcl/learning/lecture/19/00031/00005/
この形にすることの大きなメリットは、副作用を発生させないことができる点です。副作用とはざっくり言うと、変数への値の再代入になります。変数の再代入が発生すると、値の変化が追いにくくなったりテストコードが作成しにくかったりするので、副作用を減らすことは意義があるわけてます。
【今注目されている!関数型プログラミングとは【初心者向け】】
https://techacademy.jp/magazine/16381
これらが特徴の関数型プログラミングですが、言語はいくつかの区分に分けられます。純粋関数型に区分されるのはHaskellとCleanだけで、Scalaは関数型プログラミングが可能な言語と位置付けられています(副作用をバリバリ書くこともできます)。
【関数型言語】
https://dic.nicovideo.jp/t/a/%E9%96%A2%E6%95%B0%E5%9E%8B%E8%A8%80%E8%AA%9E
上記の記事で、JavaScriptで関数型プログラミングが可能、とされてることは少し注目したい点かなと。フロントエンドは副作用をバリバリ使われてるイメージがありますが、Reactなどのフレームワークでは副作用を減らすような、お作法になってたりします。ここら辺の思想などは、下記の記事にまとめられています。
【なぜ昨今のJavaScriptではイミュータブルであるべきと言えるのか歴史的背景を踏まえて言語化する】
https://qiita.com/ttiger55/items/dc18b5ea2180b5059f26
また、JavaScript以外の言語でも、関数型プログラミングにあるようなメソッドもあったりするので、関数型の知識があることは無駄にはならないと感じます。