udon's blog

思いついたことを、思いついた時に。忘れないように。

関数型言語勉強会 #こわい

第1回 関数型言語勉強会 大阪 : ATND

関数型は前にちょろっとAndroidでのscalaをトライして、ハローもできずに挫折した記憶だけ。。。
とりあえずこれを機会に再開できたらーくらいで。

○いくまで
午前中に行くはずだった打ち合わせを完全にすっぽかしてしまいました。。。
ま、まぁスタッフMLはそれなりにやれてるはずやし、まぁなんとか、ね。(皆さんすみません)

○そもそも「関数」とは
プログラミングをしていると関数がアレな感じになりますが、いわゆる数学的な関数に近いもの、だそう。
つまりは

  • 入力に対して出力が一意に決定する

ということで、もっというと

  • 主力内容に影響をおよぼすのは入力のみ

ですね。同じ入力なら「何回呼んでも、いつ呼んでも」結果は同じ。こういうのを「参照透明性」とか「副作用がない」とかいうらしいです。
# DBの状態が変わったからといって結果は変わらない、とかいろいろ

ただし、副作用が全くないかというとそうでもなくて、「局所化」する、と。

○副作用が無いと?
いつ呼んでも結果が同じなわけですから、テスト(特にUnitTest)がやりやすいわけですね。
うん。それは素晴らしい!

「まさか自動テストしてないなんて、無いですよねーーー」
「hahaha」

○inverse FizzBuzz
有名なFizzBuzz問題の「逆」を問う問題。つまり

  • 'Fizz' 'Buzz' 'FizzBuzz'から成る文字列を与えられた時に、それを出力する最短の数列は何か

ということらしい。初耳でした。
話を聞きながらこっそりrubyで書こうかとしてみたけど、、、即挫折。
ま、まぁ今度な!

○結局関数型の何がええの?
もともとこの辺はちょっと微妙な感じがしていて「おもしろそうやけど、それで何?」でありました。
ただし参照透明性の話など、理論自体を他の言語にも適用できる可能性は十分にあるわけですよね。
ついこの前「ファイル削除のAPIなので呼びだすとカレントディレクトリが変わってしまう」な関数に遭遇しましたが、そりゃぁいかんでしょう、と。

○感想
で、いや、あのですね。結局のところ
こんなに置いてけぼり食らった勉強会は久々でした。
「入門編」などという言葉はどこふく風。
まぁここまでテクニカルな話題にフォーカスが集中している勉強会自体も久々だった気がするので、その辺はもっと精進せんといかんところですな。

ちなみに全体的に言語としては結構Haskell色が強かったでしょうか。
勝手な印象ではHaskellは「原理主義的な関数型言語」な印象を持ってます。

まぁとりあえずAndroidのこともあるのでscalaをやろうとかと。
一応MBAへのインストールは完了しましたので、後は書くのみ、、、、、、のはず!

とりえあず「コップ本」と称されるこの本を買うところからですかね。

Amazon.co.jp: Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala): Martin Odersky, Lex Spoon、Bill Venners, 羽生田 栄一, 長尾 高弘: 本

最後にマインドマップを。
f:id:datsuns:20120523003751p:image