Cogito Ergo Sum.

我思う故に我あり

「関数型プログラミングの.NET開発者向け概要」という記事

 Visual Studioのスタートページに表示されるMSDNの記事一覧をときどき眺め読んでみるのだが、今日読んだ「関数型プログラミングの .NET 開発者向け概要」はなかなか面白かった。

 記事はVisual Studioに新たに追加された関数型言語F#の初歩を扱った記事で、それほど深い内容ではないのかもしれないが、関数型言語に固有の術語をなるべく用いずに、(同様の処理を行う)C#コードと比較する形でF#の特徴を解説しており、「関数型言語を用いると、手続き型言語で起こりがちなどんな問題を回避しやすくなるのだろう?」と以前から思っていた僕にとって興味深い記事だった。

 ちなみに、僕がこの記事を読んで感じたのは、

  • 「変数の値を変更できないとしたら、もの凄く使いづらそうだ」と思っていたが、考えてみれば、Visual BasicやVisual C#の文字列Stringだって値を変更できない(しかし、「文字列の値は変更できないから、もの凄く使いづらい」と思ったことはない)。
  • 「暗黙の依存関係」がマズいのであって、「依存関係」そのものが悪いわけではない(そもそも、何の依存関係もないようなプログラムは何もしないはず…)。依存関係を「明示的に」記述すればよい。
  • 単純な処理を実現するミニ関数をたくさん用意しておいて、それらと高階関数の組み合わせとして複雑な処理を実現する、という感覚は、UNIX/LinuxMS-DOSコマンドラインで単機能のコマンドをパイプやリダイレクトで数珠つなぎにしていく感覚と何となく似ている。
  • その際、処理の下請け、孫請けの階層構造をカッコの入れ子として表現するのではなく、ドット記法でつなげていくと、Rubyっぽくなる。

といったところだろうか。1つの記事からこんな風に複数のポイントに気づかされることなんて滅多にないので、ちょっと興奮している。F#やってみたいなー(Visual F# 2010 Expressってものが用意されていないのが残念…)。