2017年7月22日土曜日

Javascript関数型プログラミング P187

IOモナドの例が出ていた。Maybeモナド、Eitherモナドなど、ラッピングにより、Nullや例外の扱いがスッキリする状況がわかりやすく書かれています。その流れで、IOモナドの説明になりますが、細かいところでよく確認しないと少し難しいところもでてきます。
const changeToStartCase =
 IO.from(readDom('#student-name'))
.map(_.startCase)
.map(writeDom('#student-name'));

fromは
 static from(fn){
   return new IO(fn);
}
となり、fnそのものをIOにラッピングしている。
 fnは ()=>document.querySlector('#student-name').innerHTML
ということか

mapは
 map(fn){
 const self=this;
 return new IO( ()=> fn(self.effect()));
}
ここでは、fnは1文字目を大文字にしたり、domへの書き込みということのようだ。
いずれもIOでラッピングされた中で変換されていくということか

ただ、changeToStartCaseだけでは、IO処理の宣言的な記述のみ
IOのインスタンス(関数をラッピングしただけのもの?)なので、何も実行されていないということらしい。
changeToStartCase.run();
でコードが処理される。
ちなみに
run(){
 return this.effect();
}
となっている。

要するに、fromで、IOでラッピングした関数(ラッピングされる関数を効果関数と呼んでいるようだ)を用意して、ラッピングされたままの関数をmapで変換していき、できたものを、最後に実行させるということだろうか。


0 件のコメント:

コメントを投稿