×
データ構造とアルゴリズム

試験でのポイント

情報処理技術者試験では、大域変数はプログラミングの知識問題として、あるいはアルゴリズム問題のコードの中に登場する形で問われます。

知識問題として頻出なのは、「局所変数(ローカル変数)」との明確な違いです。「関数の中で宣言され、その関数が終了すると同時にメモリから消滅し、使えなくなる変数はどれか」という問いに対しては局所変数を選び、「関数の外で宣言され、プログラムの実行中ずっと保持され、複数の関数から共有される変数はどれか」という問いに対しては大域変数(グローバル変数)を選ぶ、という定義の違いを正確に理解しておく必要があります。

アルゴリズム問題のトレースにおいては、大域変数が登場した場合は最大の警戒が必要です。疑似言語のコードを読む際、複数の関数が順番に呼び出される中で、大域変数の値がどのように変化していくかを余白にメモしながら追いかけなければなりません。特に、関数の中で大域変数と同じ名前の局所変数が宣言されている「名前の衝突(シャドウイング)」のケースに注意してください。この場合、その関数の中では局所変数が優先して使われ、大域変数の値は書き換わらない、という言語のルール(スコープの規則)を理解しているかを問うような、引っかけ問題が出題されることがあります。

また、オブジェクト指向プログラミングに関する問題では、大域変数の欠点を克服するための仕組みとして「カプセル化」という概念が関連して問われることがあります。データ(変数)を外部から勝手に書き換えられないように保護するという考え方は、大域変数のデメリットを理解していれば非常に納得しやすいはずです。

関連する用語

局所変数、スコープ、副作用