Home > Latest topics

Latest topics > yieldをwait代わりに使っちゃっていいのかなー

宣伝1。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

宣伝2。Firefox Hacks Rebooted発売中。本書の1/3を使って、再起動不要なアドオンの作り方のテクニックや非同期処理の効率のいい書き方などを解説しています。既刊のFirefox 3 Hacks拡張機能開発チュートリアルと併せてどうぞ。

Firefox Hacks Rebooted ―Mozillaテクノロジ徹底活用テクニック
浅井 智也 池田 譲治 小山田 昌史 五味渕 大賀 下田 洋志 寺田 真 松澤 太郎
オライリージャパン

yieldをwait代わりに使っちゃっていいのかなー - Feb 16, 2007

MozLabの一機能の単体テスト用ツールMozUnitではasync型のテストケースを書くことができる、というのは前にここでも書いたんだけど、使い勝手の悪いポイント?が一つある。それは、テストケースの中で、ある処理が終わってから次の処理に進むといったことが簡単にはできないこと。

現状の仕様では、

  1. 共通の前処理(処理待ちできる)
  2. テストケース1(処理待ちできない)
  3. 共通の後処理(処理待ちできない)
  4. 共通の前処理(処理待ちできる)
  5. テストケース2(処理待ちできない)
  6. 共通の後処理(処理待ちできない)
  7. 共通の前処理(処理待ちできる)
  8. テストケース3(処理待ちできない)
  9. ...

という書き方しかできなくて、各テストケースの中でコールバック関数を使って準備が整うのを待つという使い方はできない。一般的な意味での単体テストというのがどうある「べき」なのかは知らないけど、やりたいこととしては、

  1. 共通の前処理(処理待ちできる)
  2. テストケース1(処理待ちできる)
  3. 共通の後処理(処理待ちできない)
  4. 共通の前処理(処理待ちできる)
  5. テストケース2(処理待ちできる)
  6. 共通の後処理(処理待ちできない)
  7. 共通の前処理(処理待ちできる)
  8. テストケース3(処理待ちできる)
  9. ...

の方が便利ですよね? ね?

んでscript.aculo.usユニットテストの機能ではwaitという機能を使って処理待ちができるそうだから、MozUnitステでscript.aculo.usを拡張機能の開発でも使えるようにせよ!という指令が須藤さんから下ったのだけれども。

なんか仕様があちこち違うから今までMozLabベースで作ってた物をこれ用にするにはscript.aculo.usのソースもガッツリ読まなきゃいけないっぽいし、どうもscript.aculo.usは複数のテストが同時に動くことを想定していなさそうな雰囲気だったので、MozReplみたいな機能を使って同時に複数人でテストするようなことは難しいっぽかった(そんな事ほんとにやるのかどうかはさておき)ので、新しいこと覚えるよりは今までの知識がそのまま使えた方が僕が楽だと思った。

ということでMozUnitのTescCaseクラスの定義をゴニョゴニョと書き換えて、JavaScript 1.7のジェネレータを応用し、テストケースの中で yield 5000; とか書くとそこで指定時間(ここでは5000ミリ秒=5秒)待ってから次の処理に進むということができるようにしてみた。テストケースの実行結果の返り値を見て、 [object Generator]である場合は、StopIteration例外が出るまでタイマー使って何度もnext()を実行して、それが済んでから次に処理を進めるようにした次第です。

……ということなんだけど、yieldってこんな使い方しちゃっていいのかしらん? yield(生産)って書いてるのに何も生産しとらんし。

分類:Web技術 > JavaScript, , , , , 時刻:03:43 | Comments/Trackbacks (3) | Edit

Comments/Trackbacks

yield

「清算」じゃなくて「譲る」方だと思う。
関数を途中で止めて親環境に処理を「譲る」のが yield だと思うので、正解じゃないですか?

Commented by mal at 2007/02/18 (Sun) 04:04:49

no title

なるほど。そういう意味もあったんですね。
「ジェネレータ関数」とかなんとかいう言葉から、てっきり、「生産」の方の意味だけだと思い込んでました。

Commented by Piro at 2007/02/18 (Sun) 05:18:11

JavaScript/1.7 で協調的マルチスレッド

 JavaScript/1.7 の話なので Firefox 限定です。以前、  ...

Trackback from Kazuho@Cybozu Labs at 2007/05/25 (Fri) 13:51:54

TrackBack ping me at


の末尾に2014年1月19日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2007-02-16_yield.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

writeback message: Ready to post a comment.

2014年1月19日時点の日本の首相のファミリーネーム(ひらがなで回答)

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のつぶやき

オススメ

Mozilla Firefox ブラウザ無料ダウンロード