IT Office Nishimiyahara

個人用スマホから商用プログラミングまでなんでもお任せ下さい

イベント駆動プログラミングはGOTO文を使っている気分になる

   

@nqounetです。

昨日はイベント駆動版が手元になかったのでコールバック版でしたが、イベント駆動版も晒します。

とりあえずイベント駆動版のソース

ソースコードはこんな感じです。

該当部分は日本語でコメントを書いていますが、この書き方が有用なのかについてはイマイチわかりません。

コールバックの嫌なところ

コールバックがあるとものすごく自由なんですよね。

で、その自由と引き換えに、メソッドの名前に非常に迷うことになります。

例えばfetchTemplateに対して、取得したテンプレートファイルでレンダリングするコールバックを渡すとrenderTemplateのように動作するわけです。

実際の仕事は、AJAXでgetするだけなのですが、その後のコールバックでレンダリングさせる、というふうに考えながらプログラミングしていると、名前に違和感を感じてしまうんですよ。

かと言って、renderTemplateという名前にするのは論外です。

猛者の方々はこの辺の気持ちをどう始末しているんでしょうか?

キャッシュがなければAJAXでテンプレートファイルを取得する

使い方としては、テンプレートファイルのURLと、テンプレートに反映させるオブジェクト、そしてコールバックです。

…結局コールバックは必要でした。

いや、今回のような場合なら、jQueryオブジェクトを渡せばコールバックがなくてもほどほどに使えますが、なんとなく微妙じゃないですかね?

で、考え始めると、jQueryでメソッドチェーンできるようにすればいいんだよ、という感じになります。

まあ、書けるかどうかも判断できませんが。

非同期のメソッドチェーン(=コールバック?)

この辺をうまく書こうとすると、jQuery.Deferredの世界へ足を踏み入れる必要があるんでしょうね。

「メソッドチェーンに見えて実はコールバック」だったら、非同期を意識しないでプログラミングできると思います。

というか、何故コールバックが必要かというと、非同期の処理が終わらないと次の処理ができないからです。

今までのプログラム(同期的プログラミング?)は、基本的には上から下、左から右という風に流れが決まっていました。

しかし、非同期の場合はそれが保証できないので、保証するための仕組みがコールバック、というふうに理解しています。

まあ、その部分は同期的に処理される、という事ですね。

queueはどう?

jQueryにはqueueというメソッドがあります。

そのイメージのとおり、jobを順番待ちさせる感じで使えるのですが、サンプルがアニメーションばかりなので、実際の使い所がよくわかりません。

ソースを見てみれば何かわかるのかもしれませんが、読み解ける自信がありません。

イベント駆動

イベント駆動というと、クリックした時、とか、マウスオーバーした時、のようにユーザーの操作によって動作するイメージですが、それだけではありません。

例えばコールバックの中に、動作が完了した、というイベントを発行すれば、そのイベントによって続きの動作が可能になります。

ただ、そればかりをやっているとGOTOを使っている気分になります。

非常に微妙です。

respo

respo link

ZenBackWidget

 - 情報技術について , , ,