待ち行列処理
待ち行列に関する処理はモジュールyuiのクラスQueueにまとめられています。Queueは先入れ先出し方式で行列を作ります。バス停などの行列のように、先に並んだ人が先に乗る(目的を達成する)ことができる行列です。
データの入力するところが2箇所以上あり、入力データによる計算処理は1箇所でしかできない場合など、先に来たデータから処理をしたいとき待ち行列が使われます。待ち行列の処理は入力タイミングと出力タイミングが同期しなくても処理ができるメリットがあります。
待ち行列処理の一覧
Queueクラスに含まれるメソッドは、以下の通りです。
| メソッド | 引数 | 概要 |
|---|---|---|
| add(o) | o:オブジェクト | 要素を待ち行列に追加 |
| next() | なし | 取り出せる要素を取得 |
| remove() | なし | 取り出せる要素を除去する |
| size() | なし | 現在待ちの要素数を取得 |
待ち行列に要素を追加したり、取り出したり、除去などを行うメソッド類です。
待ち行列処理の書き方
4個の要素を順不同にクリックして、クリックした順に取り出す例題を考えてみました。下図は実行画面と4個の要素をクリックしたところです。


YUI().use('node', function(Y) {
var button1 = Y.one('#button');
var d1 = Y.one('#demo1');
var d2 = Y.one('#demo2');
var d3 = Y.one('#demo3');
var d4 = Y.one('#demo4');
var o = Y.one('#out');
var q =new Y.Queue(); //(1)
var s="";
var d;
//(2)
d1.on('click', function(e) {q.add(d1); s=s+d1.get('text'); o.set('text',s); });
d2.on('click', function(e) {q.add(d2); s=s+d2.get('text'); o.set('text',s); });
d3.on('click', function(e) {q.add(d3); s=s+d3.get('text'); o.set('text',s); });
d4.on('click', function(e) {q.add(d4); s=s+d4.get('text'); o.set('text',s); });
button1.on('click', function(e) {
s="";
if(q.size() !=0){
d=q.next(); //データの取り出し(3)
o.set('text',d.get('text'));
}else{
o.set('text',s);
}
});
});
</script>
...中略...
<body>
<input type="button" value="押してください" id='button'><br>
<div id='demo1'>東</div>
<div id='demo2'>西</div>
<div id='demo3'>南</div>
<div id='demo4'>北</div>
<br>
<div id=out>セットデータ</div>
</body>
(1)はQueueの宣言です。今回qとしました。(2)以下で要素をクリックする時、待ち行列に追加しています。ボタンを押すと、(3)でデータを取り出しています。
例題は4個クリックして後、ボタンを4回押して確認するものです。
