スコープとは? ― C#と情報技術者試験の疑似言語で理解する

プログラミングをしていると、こんなことが起こります。

if (true)
{
    int x = 10;
}

Console.WriteLine(x); // エラー

「さっき x を作ったのに、なぜ使えないの?」

今日はこの理由を理解します。


■ スコープとは何か?

スコープ(scope)とは

その名前が使える範囲

のことです。

変数が「どこまで生きられるか」を決めるルールです。


■ C# の場合

C#では

波かっこ {} の中がひとつの範囲

です。

if (true)
{
    int x = 10;
    Console.WriteLine(x); // OK
}

Console.WriteLine(x); // エラー

x は {} の中だけで使えます。

外では存在しません。


■ 情報技術者試験の疑似言語では?

基本情報技術者試験などで使われる疑似言語でも

考え方は同じです。

例:

if 条件 then
    x ← 10
endif

x を表示する

このとき、

x は if の中で定義された変数

と考えるのが正解です。

外で使うとエラーになる、と考えます。


■ 疑似言語でも「範囲」は存在する

疑似言語は簡略化されていますが、

  • 手続き(procedure)
  • 関数(function)
  • 繰り返し
  • 条件分岐

の中で定義された変数は、

基本的にその中でのみ有効です。

つまり

C#と同じ発想

なのです。

手続き(procedure)と関数(function)

手続き(procedure)は値を返さない処理、関数(function)は値を返す処理です。C#ではどちらもメソッドですが、

void Show()
{
}

 は表示するだけの手続き、

int Add(int a, int b)
{
    return a + b;
} 

は結果を返す関数に当たります。違いは「戻り値があるかどうか」です。


■ なぜこのルールが必要?

もしどこでも変数が使えたら:

  • 同じ名前がぶつかる
  • どこで変更されたかわからない
  • 読みにくい

大規模開発では致命的です。

だからスコープという概念があります。


■ 試験問題で気を付けるパターン

疑似言語ではこういうサンプルがあった場合

procedure Sample()
    x ← 5
endprocedure

x を表示する

答え:

x は Sample の外では使えない

これがスコープの理解です。


■ 今日覚えること

  • スコープ=使える範囲
  • C#では {} が境界
  • 疑似言語でも手続きの中が範囲
  • 内で作った変数は外では使えない

■ なぜ今これをやるのか?

  • クラス
  • メソッド
  • static
  • 名前空間

を学びます。

そのすべての土台が

スコープの理解

です。


訪問数 9 回, 今日の訪問数 10回

C#

Posted by hidepon