Scalaで学ぶ関数型プログラミング
投稿者 おおかゆか
前回のRails勉強会で行ったScalaのセッションをブログで公開したところ、これまでのエントリで最多の62ブックマークがついてしまい、Scalaの波がすぐそこまで来ていることを実感。
それならと調子に乗って、また先週日曜日のRails勉強会@東京第44回にて、こないだのScalaのセッションの続編をやってきた。
タイトルは「Ruby使いのためのScalaで学ぶ関数型プログラミング」。前回は後半少しだけ文法の説明をほとんど即興でしてみたものの、言語概要の紹介とひたすらScalaいいよーというアジテーションがメインだったので、今回は文法に関するテーマが中心。
といってもいちおうRubyとの関連性を持たせないとRails勉強会でやる意味がないので、Ruby使いが関数型プログラミングのエッセンスを学ぶためにScalaのサンプルコードを使って説明するというものにした。
あらかじめお題も内容も宣言してあったのに前日の夜まで全く手をつけず、プレゼン資料を作るのに午前0時に始めてまるまる8時間の朝8時までかかってしまった。
2時間しか睡眠時間がとれなかった朦朧とした頭でセッションを行ったわけだが、Lispエキスパートで関数型言語にも詳しいYuumi3が要所々々でフォローしてくれたのもあって、なかなかわかりやすくてためになる発表ができたのではないかと思う。
Scalaそのものの入門ではなく関数型プログラミングの主な要素にテーマを絞ったおかげで、90分の枠の中でそれなりの密度の内容を詰め込めたし。
でも関数型言語が初めてと言う人、特にRuby使いにとって関数型プログラミングを学ぶのにScalaで始めてみるというのはいい選択だというのは本当。
私もHaskellで挫折してScalaで学び直したクチだし。
Windowsな人ならVisualStudioでF#という選択肢もあるが、LinuxやMacな人なら迷うことなくScalaだろう。
最近はPHPにまでクロージャが導入されるなど、関数型言語(のエッセンス)がトレンドになってきているし、またCPUのマルチコア化に伴う並列化プログラミングが将来的に必須になってくるはずなので、今のうちにScalaで関数型言語に入門しておくのはプログラマとして賢い投資だよと煽っておく。



















おつかれさまでした〜
修正 ^^);
Lispエキスパートで関数型言語にも詳しい
↓
Lisp好きで関数型言語に何度もトライしてめげている
セッションではお世話になりました。>Yuumi3
いやあ、ご指摘の修正箇所ですが、関数型言語初心者にとってみればそのテーマでWebに記事書いてるような人はそういうふうに見えるってことで、そこの表現はそれでご容赦ください。
クロージャと無名関数は、外のスコープが見えるかどうかという点で等価ではないと思いますがいかがでしょうか?例えばJavaの無名関数はクロージャではない、というように。
また、カリー化のページの内容は、カリー化ではなく部分適用ではありませんか?
>irohirokiさん
Javaにはあまり詳しくないんですが、確かJavaにあるのは無名関数ではなく無名クラスだったと思います。
私の理解ではクロージャとは「関数内で使用される無名関数」のことで、その意味ではJavaにはクロージャは存在しないと認識しています。
Scalaでは無名関数に名前をつけてクロージャとして使う(表現的に矛盾してますが、他にいい言い方が思いつかない)ことができるので、両者を区別しなくても別に困ることはないはずですが、あの書き方はまずかったですね。訂正させていただきます。
カリー化については、後半部分はカリー化の部分適用についての例です。カリー化の単純化した例だけでは、これで何がうれしくなるのかわからないだろうと思ったので挙げた次第です。
丁寧な返答ありがとうございます。
クロージャの本質は外のスコープへの参照を保持することにあり、無名であるかどうかには依存しません。確かにJavaにあるのは無名クラスでした、失礼しました。Javaでは外のスコープの変数はfinalなものしか見えないため、例に出しました。
カリー化のページに関しては、確かにそうですね。納得です。