基本情報技術者の擬似言語をC#で読む:局所変数のスコープを図で理解する
基本情報技術者試験の擬似言語で学ぶ「局所変数」は、C#のメソッド内で宣言する変数とほぼ同じ考え方で理解できます。
この記事では、擬似言語の例をC#に置き換えながら、局所変数がどこで作られ、どこまで使え、何を返すのかを図とコードで整理します。

まずは擬似言語とC#を対応させる
図の擬似言語では、整数型の引数 A と B を受け取り、局所変数 答え に加算結果を代入してから返しています。
関数 整数型: 合計する(整数型: A, 整数型: B)
整数型: 答え
答え ← A + B
return 答え
関数終了
C#では次のように書けます。
int Add(int a, int b)
{
int answer = a + b;
return answer;
}
| 役割 | 擬似言語 | C# |
|---|---|---|
| 関数・メソッドの定義 | 関数 整数型: 合計する(…) | int Add(...) |
| 引数 | A、B | a、b |
| 局所変数 | 整数型: 答え | int answer |
| 代入 | 答え ← A + B | answer = a + b; |
| 戻り値 | return 答え | return answer; |
C#の局所変数とは
C#の局所変数(ローカル変数)は、メソッドや if、for などのブロック内で宣言される変数です。上の例では、次の1行で宣言している answer が局所変数です。
int answer = a + b;
int:変数に入れる値の型answer:変数名a + b:最初に代入する値
この変数は Add メソッドの処理中だけ利用します。別のメソッドから answer という名前を直接参照することはできません。

return で外へ渡るのは計算結果の値です。局所変数 answer 自体をメソッド外から使えるようになるわけではありません。重要:使える範囲は波かっこで決まる
変数名をコード上で利用できる範囲をスコープと呼びます。C#では基本的に、変数を宣言した位置から、その変数を囲む波かっこ { } の終わりまでがスコープです。
int Add(int a, int b)
{
int answer = a + b;
Console.WriteLine(answer); // 使える
return answer;
}
// Console.WriteLine(answer); // コンパイルエラー
最後の行では Add メソッドのブロックをすでに出ているため、answer は名前として認識されません。
ifブロックの中で宣言した変数
void CheckScore(int score)
{
int border = 60;
if (score >= border)
{
string message = "合格";
Console.WriteLine(message); // 使える
}
Console.WriteLine(border); // 使える
// Console.WriteLine(message); // コンパイルエラー
}
border はメソッドのブロックで宣言したため、その後のメソッド内で使えます。一方、message は if ブロック内で宣言したため、閉じ波かっこを越えると使えません。

擬似言語と比べるときの注意点
1. C#では宣言と代入を1行にまとめられる
擬似言語では宣言と代入を分ける例がよく見られます。
整数型: 答え
答え ← A + B
C#では、宣言と初期化を次のように1行で書くのが一般的です。
int answer = a + b;
2. C#の局所変数は自動で0にならない
フィールドとは異なり、C#の局所変数は宣言しただけでは利用できません。値を代入してから読む必要があります。
int answer;
// Console.WriteLine(answer); // 値が代入されていないためエラー
answer = 10;
Console.WriteLine(answer); // 使える
これは「値が決まっていない変数をうっかり使う」ミスを、コンパイル時に防ぐ仕組みです。
3. returnすると処理はそこで終了する
return answer; が実行されると、Add メソッドの処理は終了し、呼び出し元へ値が返されます。returnの後に同じ流れで書かれた処理は実行できません。
呼び出し元では戻り値を別の変数で受け取る
int total = Add(3, 5);
Console.WriteLine(total); // 8
Add の中にある answer と、呼び出し元にある total は別の局所変数です。answer という変数そのものが外へ移動するのではなく、計算結果の値 8 が戻り値として渡されます。
最短形にもできる
計算結果を別の処理に使わず、そのまま返すだけなら局所変数を省略できます。
int Add(int a, int b)
{
return a + b;
}
ただし、学習段階では answer のような局所変数を置くと、「入力 → 計算 → 戻り値」という流れを追いやすくなります。途中の値をデバッグで確認したい場合にも便利です。
まとめ
- 擬似言語の局所変数は、C#ではメソッドやブロック内で宣言する変数に対応する
- C#の局所変数は、宣言した位置から、その変数を囲む
{ }の終わりまで使える - 局所変数は値を代入してから読み取る必要がある
returnで外へ渡すのは変数名ではなく値- 呼び出し元は、戻り値を別の変数で受け取れる
基本情報技術者試験の擬似言語では、まず「変数がどのブロックで宣言されたか」を確認しましょう。その視点をC#にも持ち込むと、スコープに関するコンパイルエラーや意図しない変数の使い方を減らせます。










ディスカッション
コメント一覧
まだ、コメントがありません