生き様135. 大事な事は大体ゲームから教わった~その拾参:スタックとキューとカードゲーム~
曜日感覚の危機!
このコラムで、繰り返し「仕事が忙しい」と嘆いてきました。
当然そういう状況ですから、いつくかの体調・精神的な問題が出ています。
それもついに、曜日感覚が狂ってきているので、そろそろ末期です。
ということで、この記事も「木曜日の8時半」公開が守られていません。
むしろ、木曜日の夜に気付いて書き始めました。
そして、うっかり公開設定を忘れていて、今の公開になりました。
(設定のテクで、公開日時はいつも通りに見えているのですが)
ゲームと技術の交点
技術を習得するには、手を動かすのが一番です。
ただ、遊びの中に、技術的な素養が取り込まれているものがあります。
一見分かりにくい、とっつきにくい技術も、ゲームを通した体験から学ぶことができます。
今回は、その中から【スタック】と【キュー】について解説します。
【スタック】と【キュー】の一般的な説明
【スタック】と【キュー】は、簡単に言うと「一旦棚上げしてまた戻す」為の技術です。
詳しいことは、各々で調べて下さい。
長々とスタックとキューの説明を書いていたら、いつもの記事と同じ分量になりました。
なので、割愛します。白栁手書きのこの図で解ったつもりになって下さい。
大事なのは、
- スタック:FILO(ファイースト・イン ラスト・アウト)(先入れ後出し)
- キュー:FIFO(ファースト・イン ファースト・アウト)(先入れ先出し)
ということです。
スタックとキューとトレーニングカードゲーム
ゲームと【キュー】の関連といえば、キューの語源が「ビリヤードの付く坊(キュー)である」というものがあります。
また、トレーディングカードゲーム(TCG)と呼ばれるゲームには、ルールの中で【スタック】の概念が使われている物が多くあります。
具体的には割込みの処理解決のところですね。
ゲームによっては、名称もそのまま「スタック」のものもあります。
あるカードを使用しようとしたとき、割り込んで別のカードを使用することができます。
このとき、割り込んだカードの効果の処理を先に解決します。
最初のカードの効果は、一回棚上げするわけですね。
更に別のカードを割り込ませることも、更に別のカードを……。
と無限に続けることができます。
そして、解決は一番最後に使われたカードからとなります。
全力でFILOなわけです。
これがもし、キューでの解決だったらどうなるでしょうか?
割込が割り込みの意味を成しません。
攻撃ダメージを増やそうとカードを追加で使ったのに、先にダメージ計算が終わってしまったら、使う意味ないですね。
スタックとキューを使う場所
最近、マルチスレッドの処理について、勉強し直しています。
その中では、スタックとキューの考え方が必須となります。
1つ例を挙げると、複数のスレッドから同じ処理が呼ばれた場合の処理順番の解決に利用することになります。
また、普段意識していないところにも、スタックの考え方が使われています。
それは、関数やメソッド等、サブルーチンと呼ばれる、外部の処理を呼び出す場合です。
別の処理を呼び出すときには、現在のメモリの内容(ローカル変数等)がスタック領域へ保存されます。
「スタックオーバーフロー」という実行時エラーき聞き覚えのある人は、ここでスタックが使われてるんだな~、と訳知り顔ををしておいて下さい。
基本的なことなので、解ったつもりのなっていた/意識していなかった。
そういう人も多いのでないでしょうか?
身の回りにある、プログラミング由来の考え方に目を向けてみることも、重要な学習だと白栁は考えています。
以上!
参加イベント宣伝
2022年4月9日(土)に開催される『ふりかえりカンファレンス2020』に、LT枠で登壇します。
内容としては、過去にコレざまで記事にした『生き様109. 大事な事は大体ゲームから教わった~その拾:ポジティブに振り返る~』のLT版となる予定です。
他にも、いろいろな角度からふりかえりについて考えたり、触れたりできる場になっています。
若干の参加料が掛かりますが、それ以上の価値のあるイベントだとオススメできます。
是非、御参加下さい。