Entries

スポンサーサイト

カテゴリ:スポンサー広告
更新日:--------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

関数型プログラミングに挑戦してみようと思う。乗り越えれば、たいしたこと無いよ。たぶん。

カテゴリ:JavaScript
更新日:2012-08-26
技術者であるからには、新しい技術を取り入れる努力はするべきだ。

とはいえ、必ずしも「先端技術」ということじゃない。あんまり「先端」の技術ってのは、使いものになるかどうかが分からない。興味という点で話を聞くのはいいけど、習得するかどうかは別の話ではある。

しばらく前から関数型プログラミングというのが注目されているのは知っていた。関数型言語なんて昔からあると思うんだけど、この時期に注目されるようになった理由は、知らない。

私は仕事としてプログラムを書かなきゃいけないので、それがどんなに良いものでも、実務で使えなきゃ意味が無い。そして、それが実用レベルで意味のあることならば、その成果はメジャーな言語に取り入れられて、普通に使えるようになるだろう。私にとって習得するタイミングは、そのくらいまでこなれてきた頃でいいと考えている。

> ジョイフル・ワーク 仕事をする喜び または社畜との訣別 - UEI/ARC shi3zの日記

少し前までは関数型言語で実用的な仕事をするなんてとんでもない、という空気が支配していた時期もあるのだ。
実際、JavaScriptは関数型言語への入門としてはなかなかいい。
見た目はJavaのような手続き型言語っぽいし、そのようにも書ける。


をや?どうやら、そのタイミングは、もう来ていたらしい。そういえば、JavaScriptはとにかく関数、ってことを学んだばかりだったっけ

> JavaScriptが好きになってきた。

そんなわけで、最近、関数型プログラミングについて考えている。

> 関数型言語が普及しない理由

この二つのソースコードは、凄く似ている気がします。Java はやっぱり C と似ているんです。つまり構造化言語を書いていたプログラマ達からオブジェクト指向言語はすぐ近くに見えていたんですよ。

しかしオブジェクト指向言語から関数型言語は見えないのです。

恐らく何か大きなパラダイムシフトでこの距離を飛びこえないといけないと思うんですよ。


パラダイムシフトは、乗り越えて振り返れば当たり前に見える、という。今の人は、オブジェクト指向から学ぶんだろうから、あんまり違いがわからないのかもしれない。

けれど、オブジェクト指向が出てきた時だって、「分からない」とか、「どんな意味があるんだ」って声は多かった。結構大きなパラダイムシフトだったと思う。

> 疑りぶかいあなたのためのオブジェクト指向再入門

構造化プログラミングからオブジェクト指向に移るとき、視点の変更があった。

構造化プログラミングの時代は、「処理」を中心にプログラムを書いていた。「手続き」が初めにあって、そのための必要としてデータがあった。だけど、オブジェクト指向では、これが逆転する。(詳しくは、上記リンクの「4.オブジェクトに仕事をさせる、ということ」を参照してください)

視点を逆転し、クラスという概念を作ることで、カプセル化、継承、ポリモフィズム、ダイナミックビンディングというオブジェクト指向の特徴が出てきた。

> 関数型言語が普及しない理由

 このように、関数型言語はひたすら副作用の無いものを組み合わせて全体を組み立て、副作用は局所化して扱うようにプログラミングするための言語ですきっと。副作用をだらだらと書き続ける、いわゆる手続き型言語との根本的な違いが見えてきました。こういう背景を踏まえれば、カリー化も高階関数もパターンマッチも遅延評価も末尾再帰もモナドも、その他あらゆる関数型言語的な技法が価値を持っていることが分かるような気がします。


プログラミング言語の進化は、基本的に一貫している。一言で言うなら「グローバル変数を可能な限り排除すること」

副作用を局所化する、ってのはさ、ずっとやってきていることだよ。構造化言語は、モジュール化によって、それを実現しようとした。オブジェクト指向では、クラスで隠蔽化することで実現しようとした。

そして、関数型言語では、変数への再代入を禁止することで実現するという。

「C++」ってのはさ、本質的には「C」にクラスを追加しただけ、なんだよね。それだけで、構造化言語だった「C」をオブジェクト指向言語にした。「JavaScript」はオブジェクト指向言語だけど、「関数」をオブジェクトとして扱えるようにすることで関数型プログラミングを取り入れている。

変化はそんなに大きくないんだよ。必要なのは、視点の変更だけだ。

確かに、視点の変更ってのは難しい。だけど、構造化プログラミングからオブジェクト指向へ乗り越えた時のことを考えると、乗り越えちゃえば、たいしたことじゃないよ。たぶんね。

だから、そろそろ関数型プログラミングに挑戦してみよう、と思っているんだ。






スポンサーサイト

Appendix

プロフィール

いむら@fintopo いむら@fintopo

フリーのシステムエンジニア兼プログラマです。趣味はガーデニングとカメラ。2017年4月にα7IIを買いました。フルサイズ一眼初心者です。

このページのQRコード

季節暦

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。