変数のスコープ| プログラミングの砂場

プログラミング学習やタイピング練習に役立つツールを公開しているサイトです。

変数のスコープ

変数は、宣言した場所によって「使用できる範囲」が決まっています。

この「使用できる範囲」のことを「スコープ」といいます。

変数は、宣言さえすればどこでも使えるというわけではありません。

変数のスコープを無視しては、まともにプログラムを書けないといっても過言ではありません。

目次

1. 変数のスコープ

「変数のスコープ」を理解するために「ブロック」を使用します。

// ブロック内で変数宣言と参照を行う
{
    let x="おはよう"
    print(x)
}

上のプログラムを実行すると、結果は「おはよう」ですよね。

では、下のプログラムはどうでしょう?実行してみてください。

// ブロック内で変数宣言
{
    let x="おはよう"
}
// ブロック外で変数参照
print(x)

結果は、「エラー」になります。

なぜ「エラー」になったかというと、変数「x」が使用できないところで「x」を使用してしまったからなんです。

下のようにprint(x)をブロック内に移動すると問題なく変数を使用できます。

// ブロック内で変数を参照するようにした
{
    let x="おはよう"
    print(x)
}

結果は、「おはよう」です。

今度は、変数「x」が使用できるところで「x」を使っているので問題ありませんでした。

要するに、変数は、その宣言された場所と同じ位置か、それより内側のブロックでのみ使用できるということです。

別の言い方をすれば、変数には「寿命」があるということです。

変数は、「宣言された位置(ブロック)で生まれて」、その「ブロックから外れた」ときに、変数は、その一生を終えて「消えてなくなってしまう」のです。

ブロックがどんなに入れ子(ネスト)になろうが、その変数が宣言された位置と同じか、内側のブロックであれば、その変数を使用することができます。

// 変数宣言はブロックの外
let x="おはよう"
{
    {
        // 変数宣言された位置より内側のブロックなら参照できる
        print(x)
    }
}

結果は、「おはよう」になります。

プログラムを書いていて、宣言したはずの変数が使えないというときは、「変数のスコープ」を疑ってプログラムを見直してみましょう。

2. 試してみよう

次のプログラム中で宣言された変数は、参照されたときにエラーになりますか?

問1

// ブロック無し
let x="おはよう"
print(x)

問2

// 宣言はブロックの外
let x="おはよう"
{
    // 参照はブロックの中
    print(x)
}

問3

// 宣言も参照も同一ブロック
{
    let x="おはよう"
    print(x)
}

問4

// 宣言はブロックの中
{
    let x="おはよう"
}
// 参照はブロックの外
print(x)

問5

// 入れ子のブロック
{
    let x="おはよう"
    {
        print(x)
    }
    print(x);
}

2-1. 答え

問4は、変数が宣言された位置より外側で参照されているので「エラー」になります。

3. まとめ

ブロックを使い変数のスコープを体験しました。

変数のスコープとは、その変数を参照して使える範囲のことです。

変数は、その宣言された場所と同じ位置か、それより内側のブロックでのみ使用できます。


次は、「条件分岐(じょうけんぶんき)」についてです。


TOP