とあるIT屋の独白

ITや経営について主に書きます

関数型プログラミングについて調べてみた

近頃、関数型プログラミングについて目にすることが多いですね。私も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以外の言語でも、関数型プログラミングにあるようなメソッドもあったりするので、関数型の知識があることは無駄にはならないと感じます。