変数のスコープ

スクリプトとか触ってていつもやべーなーと思うのが、宣言してない変数を使えることですね。


打ち間違えとか、グローバル変数を消した(消された)ことに気づかなくてそのまま使ってしまって原因不明のバグとかよくある話だと思います。
ちゃんとオブジェクト指向よろしくしてればそういうミスも減ると思うんですけど、
スクリプトを使う人ってのは大抵元プログラマーの企画者だったりレベルデザイナだったりしてるのでそこら辺を徹底させるのは無理があるよね。


変数宣言をさせるのを徹底させても、スクリプトの文法上、エラーを素通りさせてしまうことには代わりがないって言うかあんまり防ぎようがないし冗長だし。


なので考えた。
・宣言していない変数は読み出しするとエラーになる。
・宣言してない変数は基本的にグローバルなのを辞める。
 具体的には使われ始めたブロック内のみ有効なローカル変数になる。
・変数をグローバルにするには global とかつけて宣言する。ブロックに関係なくglobalになる。


何か問題あるじゃろか。あるようなないような。


最近気がついたスクリプトにあると便利な型というか変数。
・読み出すと変数が初期化される、リードアットワンスな変数。書き込みは特に制限はなし。


これあるとイベントドリブンとそうじゃないループ型処理の場合がごっちゃになってるときに便利。なきがする。
自分の知らないどこかで読み出されてしまっていて空っぽになってるの知らないで使ってしまうと悲惨。