プログラミング言語で数多くの言語が採用しているグローバル変数の危険性について説明します。(※C#のようにグローバル変数を禁止している言語もありますが。)
プログラミングで安易に使いがちなグローバル変数これが無い、もしくは少ないうちはそれ程影響がでないかもしれません。しかし、これが多くなるとソースが読みにくいばかりでなく、グローバル変数多用における爆発現象が発現されます。超絶に読みにくくなるうえ、パッチとしてまたグローバル変数を使って蓋をするのですから、被害が甚大となります。特にチーム開発の現場では禁止事項にしてもよいぐらいに危ないものであるのは確かです。
しかし、RGSSではまだ節度をもった使い方であるものですから、それ程の被害は報告されていません。やばいのは、CやJava、Rubyといった本格的なものです。個人的にC#のグローバル変数禁止は英断といえるでしょう。
では実例に入ります。
$face_no = 1 ; $char_no = 2; $position = 2
これを見てぞっとしない方はプログラミングの勉強をやり直しましょう。 正しくは次のようにすべきです。
@window.control([face_no]1,[char_no]2,[position]2)
こうすれば、ローカル変数の中に閉じ込められるので、見るべき個所はほんの僅かで済みます。先ほどの例ですと、プログラム全体を見渡してどこがどうなってるの?とかを検証せざるを得なくなります。プログラム全体を見渡してどうなっているのかが分からないまま使用すると、新たなバグを生み出す温床にもなっていきます。
グローバル変数は少ない方がいいですので、次のように閉じ込める方法も有用です。
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
#以下続く
module Game
@switches = Game_Switches.new
@variables = Game_Variables.new
#中略
def self.switches;@switches;end
def self.variables;@variables;end
#中略
end
※重大な注意:殆どのRGSS素材はグローバル変数ありきで対応しています。
最後に、有能なプログラマほど、グローバル変数を避ける傾向にあることは頭の片隅にでも入れておいてください。