グローバルは宣言に二種類の方法があります。ただし上書きの可能性があるため、ドット記法を用いないグローバルの宣言および利用はあまり推奨しません。
globalvar A; A = 0;
global.B = 0;
/* 大文字は筆者がグローバルを使う場合大文字にする癖があるだけです */
上記二つのコードはどちらもグローバル変数として確保して、値に0
を代入しました。
変数の生存期間
変数の生存期間はプログラムが終了するまで保証されていて、グローバルとして確保した変数はプログラム内のどこからでもアクセスができます。
任意のタイミングで宣言してもグローバル的に利用できる「定数」として Enums (列挙型)もあります。列挙体もグローバルと同じくプログラム実行中ならどこからでも宣言してどこからでも参照できますが、「定数(constant)」なので一度設定した値を途中から変更することができません。
グローバル変数は列挙型と違って値を変更できるし、プログラム中ずっと記録を保持してくれるので便利は便利なのですが……。
グローバル変数の問題点や利用上の注意点
問題はどこからでもアクセスできるが故に、アクセスを制限することができない。安全に利用するためにはドット記法が必要(※ 永続化したglobalという特殊なオブジェクトに値を集めていくイメージ)、グローバルへのアクセスは遅い。一度確保したらメモリに常駐するため、メモリから削除する場合は自動変数としてスコープを変更する必要性など。
グローバルはよく考えて要所だけで使うようにしましょう。アクセスが遅いので、使い捨てのローカル変数を使ってグローバル値をローカルで受け取るようにして、必要に応じてまたローカルからグローバルへ値を受け渡しするなどアクセスに仲介を設けたほうが処理速度も上がる場合があります。
またグローバル的に使うことができる変数はデータが数値だったら score
や health
、lives
という三つが Built-In に用意されているので、あえて自分で宣言してまでグローバルを作らずに、上記三つで足りる場合はこれをまず利用したほうが効率的※。
※ ただし health
以外、値は整数( Int )化される。
参考 (YoYoGames):Global Variables