プログラミングの要素にステータスというものがある。
時として、自分が作ったのではないクラス・関数のステータスを見る場合がある。
そんなステータスを使うのはあやういのだ。
そんなあやうさを例え話で。
シュレッダーがある。書類を入れると切り刻んでくれる機械だ。
まずはこんなやりとり。
「内部の歯が止まってるか止まってないかがわかるよね。それを外からも信号とれるようにしといて」
「それなら簡単ですやっときます」
この信号をもとに、内部の歯が止まってたら、ランプが消えて、内部の歯が動いていたらランプがつくようにする。
ランプが点滅する装置。
だいじょうぶだ。調子がいい。
だが、ここで問題は、
内部の歯が止まってる信号が落ちているからといって、
手を突っ込んでも大丈夫だろうか?
1.内部の歯を動かす電気は止まっていても、実際には余力で回っているかもしれないのだ。
2.その瞬間、止まってる信号を確認して、そして、実際に止まっていても、いつ動き出すかも知れないのだ。
実に危険だ。手を安心して入れるためには、ステータスとは別の機構がいる。
プログラムでも同じようなことが起こる。
例えば、ムービーを扱うライブラリをつかっているとして。
Stopする関数を呼んだ。
ステータスを見る関数をみると「Stop状態」だ。
だけど、内部的には、まだStop処理をしてる途中で、なにかファイルを扱う関数をこれから呼ぶかもしれないのだ。
そして、そんなことはマニュアルにも書いてないかもしれないのだ。
「Stop状態ならもう、ファイルなんかいじってないはずだ」
VS
「いえいえ、うちのシステムはそういう作りじゃないんですぅ~」
ステータスはあやうい。