Better Ruby Through Functional Programming

11/7 11:15-12:00 @ Room3 by Dean Wampler

関数プログラミングは、高レベルな並列アプリを書くもっとも堅牢な方法として、最近面白くなってきている。しかしながら、関数的なアイデアを適用するのは、ほかの意味でも恩恵をもたらす。このセッションでは、関数プログラミングの鍵となるアイデアRuby がすでにサポートしている関数「的」な特徴、そして関数プログラミングの考え方でいかにコードを改善できるかを紹介する。

Ruby はいくつかの関数プログラミングの特徴をサポートする。不変の変数 (value objects) をつくることができ、副作用なしに関数を書くことができる。つまり、グローバルななにかやオブジェクトの状態、関数によって返される処理の内容が変化しない。これらの特徴は限定的なようであるが、よくみかけるような一般的なバグを排除する。

また、これらの特徴は、同期を必要とするスレッド間での状態共有が不要なので、並列性を容易に実現する。例として、アクターモデルと使った Ruby における関数型の並列性をみてみよう。

(その名が暗に示すように) 関数プログラミングにおいては、関数が第一級の市民である。変数に関数を与え、引数として他の関数にわたしたりもできる。Ruby はすでに第一級市民としての関数 (メソッド) をサポートし、クロージャが無名関数となっている。

RubyDSL は、多くの関数コードのように、自然に宣言的である。コードの単純さは、大きく、簡単ではないアプリにおいて重要なメリットをもたらす。

ついでに、ほかのいくつかの有用な関数のテクニックをみてみよう。nil値を使うのを避けたり、配列やマップ、パターンマッチングをよく使ったりなどだ。

このセッションが終わるとき、関数プログラミングがあなたの Ruby プロジェクトにもたらす恩恵に対して、新し理解を得ることになるだろう。

About Dean Wampler

I'm a consultant at Object Mentor, "Uncle Bob's" company. Recently, I've focused on "polyglot and poly-paradigm programming"; how to combine languages and modularity "paradigms" (OOP, FP, aspect-oriented programming, etc.) to implement applications in the most effective way. In particular, I have started using Functional Programming ideas to improve my Ruby code.

My open source projects are Aquarium (aquarium.rubyforge.org), an aspect-oriented toolkit for Ruby, Contract4J (contract4j.org), a design-by-contract tool for Java, and I've contributed to FitNesse (fitnesse.org), an acceptance testing tool for many languages.

I blog frequently on the Object Mentor blog, blog.objectmentor.com.