”命令型のコールバック、関数型のプロミス”への反応(とその後)
@Jxck_ ごめん、文脈がよく分からない。プロミスがコールバックに切り替わるより前から EventEmitter は存在してる。
2013-04-12 00:09:00"プロミスは、問題を根本的に異なる方法でモデリングする。構文よりも深いところまで行って、問題の解き方を本当に意味論のレベルで変えてしまう" 非常に興味深い / “翻訳: ”命令型のコールバック、関数型のプロミス: Node が逸し…” http://t.co/RCbhzHKS3K
2013-04-12 00:15:37WinJS (Win8 ストアアプリの JS の API ね) はプロミスベースの API なので使うのが避けられないのだけど、うまく使えば素敵なものだとは思う。でも酷い使い方を見ることもあって、「問題を根本的に異なる方法でモデリングする」ってのが壁だったのかなと思った。
2013-04-12 00:17:17ともあれ (JW)、Node.js の API としては低水準でシンプルなコールバックを提供するから、高水準なものが欲しい人はコールバックの上にプロミスでもファイバでも好きなものを乗せて使ってね! という感じ。
2013-04-12 00:26:01補足
@okapies まとめまで乙です。「じつは実装されそうになったことが…」ではなく、「かつては実装されていた」です。約 2 年前まで、fs などの API はプロミスを返していました。ry が実装して~のツイートはそのことです。v0.1.30 でコールバックに変更されました。
2013-04-13 16:20:42文中のコード例について
内容が思い切り Node.js をディスってるので炎上覚悟だったんだけど、わりと穏やかな滑り出し。実際、関数型文化圏じゃない人が後半の reduce() とか見てどういう感想をお持ちになるか、かなり興味がある。https://t.co/pE0M8hb22Q
2013-04-11 21:06:33@okapies とても分かりやすくて良かったです。内容について一点。使用しているPromiseライブラリが分からないですが、おそらく原文の時点でlistPromiseのコード間違ってる気がします。原文でMike氏がコメントしてる方がより妥当に見えました。
2013-04-12 01:20:27@okapies 実際に動かしてはいないので確証はないですが、Mike氏の指摘だけでは不十分で、おそらく、その指摘に加えて、3行目のfor文も削除する必要があるように思えます。ただし、原文コメ欄で誰も指摘してないので、気のせいかもしれないです。
2013-04-12 07:30:12@okapies @ktz_alias 1 行目の引数名と 2 行目の変数名を入れ替えればよさげに見えます。元エントリで Luis さんがそうコメントしてますね。でも内容にはあまり影響ないし原文ママということでいい気がしますw
2013-04-12 13:50:46@okapies 翻訳お疲れ様でした。reduce() の例については特に何も思わなかったですねー。(プロミスでは) 自然だし普通すぎてするするーっと読み流してしまいました。実際、昨年作った Win8 用オレオレフレームワークを見てみたら同じように使ってました。(続く)
2013-04-12 14:06:24@okapies (続き) コールバックでも同様に reduce() で逐次処理を表現できますが http://t.co/Ube4DRpXK5 自分はこの方がびっくりしました。最初に見たとき、これは自分で思いつく気がしないと感じた記憶があります。(続く)
2013-04-12 14:08:56@okapies (続き) この違いがどこから来るのかはおもしろいかも。プロミスでなら自然に書けることがコールバックでは気づけない。プロミスは reduce() と、コールバックはループとそれぞれ抽象度が近いからなのか?とか。
2013-04-12 14:11:22@koichik @ktz_alias お返事遅れました。そうですね、自分でも検証できないので注記だけしておこうと思います。ありがとうございました。
2013-04-13 00:05:38@koichik あと、後半の関数合成は明示的にthis.nextを呼ばないといけないようですが、そこを関数の戻り値とすることで色々捗る、という話がこの中のどれかに書いてあった気がします。 https://t.co/ajLXCega6a
2013-04-13 00:58:05@okapies 書き換えって apply() のことでしょうか? apply は関数を呼び出すだけですが。とりあえず同じやり方で、記事の dirs.reduce() と同等 (ただしエラー処理は手抜き) のコードはこうなります。https://t.co/t7ejKFOPxz
2013-04-13 01:36:19@okapies this.next() は単にブログ主の好みでw、ポイントはプロミスというオブジェクトをチェーンする代わりに、reduceRight() でクロージャをチェーンしてるところです。前のリプに書いた Gist で伝わるかと思いますが。
2013-04-13 01:40:18@koichik ありがとうございます、コールバックの中で次のコールバックを生成しているわけですね。プロミスのいいところは、入出力の口が引数と戻り値という場所に固定されるところかなと。読み書きする時はそこだけ見れば良いので、思考の発散を防げるのだと思います。
2013-04-13 02:48:31