濃縮還元オレンジニュース

「非同期プログラミングの改善」のエッセンス

この記事を読むのに必要な時間:およそ 0.5 分

サーバサイドJavaScript「Node.js」に関するイベント「東京Node学園#1」にて,小林浩一氏が発表した資料です。当日の様子はUSTREAMにて公開されています注1)⁠

この発表では,コールバックスタイルで非同期プログラミングを行うと無名関数のネストが深くなってしまう問題に対する解決アプローチを提示しています。無名関数をやめてそれぞれに関数定義をしたとしてもgoto文のようにあちこちに処理が飛ぶことになり,見通しの悪さに対する根本的解決策にはなりません。そこで,フロー制御モジュールを用意して,固有処理を行う無名関数と「次」の無名関数を呼び出すコールバックとに分離し,複数の無名関数をチェインのように次々に呼び出すようにする,という案を考え出しました。エラーハンドリングを含めたフロー制御モジュールコードはリスト1のようになり,たったの13行に収まります。

現在,小林氏を含む有志によりNode.jsに関する書籍の執筆が進められており,上記をさらに洗練させたアイデアも掲載されているようです。いろいろ内容も膨らんでおり,500ページを超えることが予想され,当初のスケジュールから大幅に遅れているようですが,かなり充実した内容として期待できます。

リスト1 フロー制御モジュールのコード

function chain() {
  var actors = Array.prototype.slice.call(arguments);
  next();
  function next(err) {
    if (err) return actors.pop()(err);
    var actor = actors.shift();
    var args = Array.prototype.slice.call(arguments);
    if (actors.length > 0) {
      args = args.slice(1).concat(next);
    }
    actor.apply(null, args);
  }
}
注1)
小林氏の発表は54分あたりから。

URLhttp://www.slideshare.net/koichik/node1

著者プロフィール

角田直行(かくだなおゆき)

普段はお仕事でPHPやJavaを使ってWeb開発をしています。一部でセレブエンジニアとか言われてますが,全然セレブじゃありません。

コメント

コメントの記入