最近何かと話題になる関数型プログラミングについて
関数型プログラミングって結局なんなのかってまとめ論争があるようですが
その記事を読む中でそれを真に受けて自分の中で決めつけてしまい思考停止するのは怖い事です。
今回はそういう内容の記事を見て、自分でしっくりこない部分をまとめてみました。
そもそも関数が違う!
関数型プログラミングの「関数」は、引数に対して、一意に返り値が決まる数学的な意味に近い純粋な「関数」であって
Java等で通常我々がメソッドと呼んでいるものと同等ではありません。
つまり boolean save(Data data)といった、保存という機能の実行の返り値が、保存が成功したか、そうでないかを返すと言ったメソッドは、関数型プログラミングでは「関数」とは呼ばないのです。
ここでわかるのは、副作用を持つものと、そうでないもの(純粋関数)に切り分ける必要があるということです。
そしてこれらは、いままで開発で多くの人が”上手くやってきた”方法ですよね。新しさってあんまりありません。
でも、明らかにこの手法によって、ロジック上にロジックを記述する以外のものを紛れ込ませなくて済む。っていうことだけはわかります。
新しくない?いや新しい!
関数型プログラミングでは「関数」(Iに対して変わらないOを返す関数)は第一級として扱い
カリー化や、高階関数等を使いこなすには「関数」が純粋関数として扱われる事が必要です。
そして、それは多くの開発で使われてきた言語にはあまり取り入れられてはきませんでしたよね。
そういう意味では新しいモノだと思います。
結局難しい?
難しいです。知れば知るほど、簡単にはできないだろうなと思います。
- 数学的な知識による、結果の予見が必要になる。
もしかしたらそうではないと言われるのかもしれませんが、関数型プログラミング言語でそれ自体が備えるポテンシャルを引き出すためには数学的なアプローチが必要になり、それらを使いこなすには、アカデミックな教養としての関数型プログラミングについての知識が必須であるのがわかります。
バカでもできる?できない?
この問いに対しては、どちらでもないとしか言えないです。通常のプログラミング言語でも
バカでも出来る部分もあれば、頭が良くないとできない部分があります。
それと同じ様に関数型プログラミングにもそういう側面があります。
まぁ当たり前かもしれませんが。
最低限の関数型プログラミングで授かる恩恵を大事にし続ける。関数型プログラミングを常に意識し続け、引き出しを増やして行く必要が有るのだと思います。
まとめ
まとめていくと、自分の中でも曖昧な部分がはっきりしてきて、漠然とあった恐怖が、恐怖すべきものとそうでもないものに分割できて
これからもっと勉強していく上で、正しい道筋を得るきっかけになったと思います。
また、まだ勉強している段階で、実際に開発に携わる事はありませんが、そこで得られるエッセンスは、Androidのプログラミングに活かされると思っています。
まず手が付けられるところからという姿勢で挑み続け、自分のソフトウェア、アプリ開発の新しい境地を開拓していきたいと思います。