どーも、わいとんです。
遅まきながら、新年おめでとうございます。
さて。近頃、個人的に気になっているCPANモジュールの一つにMoobXというものがあります。
今回は実際にMoobXを使って、PerlでのReactive Programmingを試してみましたので、ご紹介したいと思います。
MoobXについて
MoobXはReactive programming frameworkを標榜しており、JavascriptのMobXにインスパイアされたものであるようです。
本エントリ執筆時点での最新バージョンは0.1.0ですが、作者のYanick Champoux氏によって精力的に開発が継続されており、現在も3つのissueがopenとなっています。
なお、最初のリリースである0.0.1が今年の1/13にリリースされたばかりであり、0.1.0のリリース日も1/14であることから、今後まだまだ仕様が変わる可能性があると思われます。
Reactive Programmingとは
そもそもReactive Programmingとは何なのか、という疑問を持っている方もいらっしゃるかもしれません。
もっともわかりやすいReactive Programmingの例としては、Excelの数式が挙げられます。例えばセルA1に=A2+A3
という定義がある場合、A2とA3の値を加算した結果がA1に反映されます。この時、A2の値を修正すると、即座にA1に結果が反映されます。
Excelの場合は、A1に値の関係性を記述することで、A2及びA3の値の変更を伝播させるデータフローが生じます。
このような値の関係性を記述して、値の変更を伝播させる、データの流れに着眼したプログラミングパラダイムのことをReactive Programmingと言うようです。
MoobXを使ってみる
では早速MoobXを使ってReactive Programmingをやってみます。
MoobXはcpanm
やcpm
などを使ってインストールできます。
1 | cpanm MoobX |
実際にMoobXを使った簡単なコードを書いてみました。
1 | use strict; |
この結果は以下のようになります。
1 | $ perl ./observer.pl |
$y
の変化に応じて$z
も変化していますね。
もしこれがReactive Programmingでなければ、おそらく以下のような結果になっていたことでしょう。
1 | $ perl ./observer.pl |
MoobXの基礎
MoobXを利用する上で覚えなくてはならないことは2つだけです。
observer
observer
には、値の関係性をコードブロック(無名関数)として記述します。
1 | my $z = observer {$x + ($y * 2)}; |
observable
observable
には、observer
で言及される対象となる変数定義を記述します。
1 | observable my $x; |
まとめ
PerlにおけるReactive ProgrammingをMoobXで実現できる、ということを紹介しました。
応用することで、様々な有益モジュールの開発に貢献しそうな予感がしますね。