今コードをジェネレータを使って書き換えている。やっぱりジェネレータを使ったほうが状態保持のための変数を用意・管理しなくていいしね。これをしなくていいのはジェネレータがyield
を発動した時点の状態を保持してくれるからだけど。面倒な部分を言語が肩代わりしてくれるのだ。
ジェネレータのこのような使い方はコルーチン(マイクロスレッド)とも呼ばれる。C++言語を使って遊んでいたころ、このコルーチンという言葉は何度かC++界隈をにぎわした。やねうらお氏もかつてマイクロスレッドを使ったタスクシステムを提唱していたように記憶している。
http://bm98.yaneu.com/intensive/ggg/
昔このページをよく読んだなぁ。。昔のホームページっぽい感じが歴史を感じさせるわ。。
また郵便はみがきさんのコルーチンライブラリも素敵であった。
なにしろゲーム(特にシューティングゲーム)はコルーチンと相性が良い。ゲームはインタラクティブなリアルタイム・アニメーションであり、1コマごとに状態を管理しなければいけないからね。
そういうわけで、ジェネレータ関数は思い入れがあるので、そこかしこで使いたくなってしまうのである。