[ 前へ | 目次 | 次へ ]
Japanese English

スコープとブロック

ここでは、同じ名前の変数を呼び出す際のルールである、スコープとブロックの概念を扱います。

スポンサーリンク


長いプログラムでは、変数名の重複を気にする必要がある

長いプログラムを書くと、時には変数を数百個も使用するケースも生じてきます。 そういった場合、変数名をいちいち数百個も用意するのは非常に面倒です。

重要な変数にはきちんとした名前を付ける事が推奨されますが、 一時的な雑用変数には、1 文字からせいぜい数文字程度の同じ変数名を使いまわす事も多いでしょう。

しかしながら、同じ名前の変数がいくつも存在する場合、呼び出しに何のルールも無い状態では、 いったいどの変数を呼び出しているのか不明瞭になります。 そこでプログラミング言語には、これを決定するためのルールが設けられており、それを理解して効果的に活用する事が、読みやすいコードを書く上で重要になります。

ここでは、VCSSLにおけるルールについて説明しますが、C言語風の多くの言語でも、内容は共通している場合が多いです。

変数を呼び出せるスコープと、その範囲や優先度を区切るブロック

例えばあなたの家族が、家の中であなたの名前を呼ぶと、あなたは「自分が呼ばれた」とすぐに判断できます。 しかし、日本中であなたと同じ名前の人はたくさんいます。それにもかかわらず、 あなたが「自分が呼ばれた」と判断できたのは、そこが家の中だったからに違いありません。

この「家」と全く同ように、プログラム内において変数呼び出しの可能な範囲や優先順位を司る、 「スコープとブロック」というものが存在します。

ブロック

例えば、次のようなプログラムを実行してみてください:

- 実行結果 -

3

これを実行すると 3 が表示されます。

上のプログラムにおいて、 記号「 { 」と記号「 } 」で区切られた領域を ブロックと呼びます。

上ではprint関数で変数 i を呼び出していますが、ブロックの内側にある変数 i の値が呼び出された事がわかります。 これは、家の中で名前を呼ぶと、家の中の人が答えてくれるのと同じです。 例えるならば「ブロックでそこに家を建てる」わけです。

このように、ブロックは変数を呼び出す優先度を上げる効果があります。 ブロックが何重にも階層的になっている場合でも同様です。 その場合、適当な位置で変数を呼び出すと、まず呼び出し地点に最も近いブロック内から探されます。 ブロック内に呼び出したい名前の変数が存在しない場合は、次にブロックの外側が探されます。

スコープ

続いて、スコープについてです。スコープとは簡単に言うと、 変数を呼び出し可能な範囲の事です。 上の例のように、ブロックの中で宣言された変数のスコープは、 そのブロックの内側に限定されます。 「 家の外から家の中にいる人を呼んでも、気づいてもらえない 」というわけです。 実際に試してみましょう。次のようなプログラムを実行してみてください:

- 実行結果 -

エラー: 宣言されていない変数「 i 」を呼び出しています。

この場合、エラーが表示され、プログラムが強制終了されます。 変数のスコープの外側から変数を呼び出す事は決してできません。

しかしながらブロックは、内側にある変数のスコープが「外に漏れないように」区切って制限しますが、 外側にある変数のスコープについては何も制限しません。 つまり、ブロックの内側から、外側にある変数を呼び出す事は可能です。実際に試してみましょう:

- 実行結果 -

2

この場合、確かにブロックの外側の i が呼ばれ、 2 が表示されます。

グローバル変数とローカル変数

何らかのブロック内で宣言された変数の事を、ローカル変数と呼びます。 これに対し、すべてのブロックの外側で宣言されている変数は、グローバル変数と呼びます。

ローカル変数は自分の属するブロック内からしか呼び出せず、ブロック外では存在しないのと同じです。 いわば、その場だけの使い捨ての変数です。

これに対してグローバル変数はどこからでも呼び出せるので非常に便利ですが、 使いすぎてグローバル変数の量が多くなりすぎると、プログラムが読み辛くなってしまうという欠点もあります。



スポンサーリンク



Japanese English
この階層の目次
お知らせ

各ソフトウェアをアップデート、リニアングラフのコマンド拡張やVCSSLの英語対応など
2024/02/05 - 各ソフトの一斉アップデートの内容をお知らせします。今回は、リニアングラフのコマンド機能を大幅拡張したのがメインです。また、VCSSLのメッセージ類の英語対応も行いました。

Vnano の Ver.1.1 で実装した反復計算高速化の内側
2024/01/17 - 前回のお知らせ記事の続編です。スクリプトエンジン Vnano の Ver.1.1 において実施した高速化を、エンジン内部の実装面から掘り下げて解説します。

スクリプトエンジン Vnano の Ver.1.1 を公開、同じ内容の反復実行が劇的に高速化
2023/12/22 - スクリプトエンジン Vnano の最新版を公開しました。同じ計算式やスクリプトを反復実行する速さが、大幅に向上しました。次期版リニアングラフ3D内での活用例を交えつつ、詳しく解説します。

新着
[公式ガイドサンプル] 各種の図形や画像を描画する

「VCSSL 2DCG開発ガイド」内のサンプルコードです。図形や画像などを描画します。
2022-12-16
角度の「度」とラジアンとを相互変換し、図示もするツール

45度などの「度」の値と、ラジアンの値とを相互に変換できるツールです。対応する角度の図示もできます。
2022-11-22
[公式ガイドサンプル] 立体モデルを回転させるアニメーション

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、アニメーションで回転させ続けます
2022-11-18
[公式ガイドサンプル] 立体モデルを回転させる

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、指定した角度だけ回転させます。
2022-11-17
[公式ガイドサンプル] 四則演算の計算順序や、カッコを使った順序指定

「VCSSLスタートアップガイド」内のサンプルコードです。四則演算が計算される順序や、カッコを使って順序を指定する方法を例示します。
2022-10-31