【Scratch入門】2つの変数(グローバル変数とローカル変数)について考える
※ 当ページには【広告/PR】を含む場合があります。
2021/09/28

急に降って湧いたかのように始まるScratchの基礎講座の時間です。
以前このブログ記事の中では、下のリンク記事の中で、Scratchの
(グローバル)変数
ローカル変数
その記事ではこのグローバル変数とローカル変数の違いの大まかな概要だけを説明しました。
Scratch言語の重要な概念ですので、今回はこの2つの変数の違いについてもう少し詳しく考えていきます。
グローバル変数(通常の変数)
最初に通常の変数に関して考えてみましょう。
Scratchに慣れている方は、今更な内容ですが念の為の復習です。
まずはScratch(オンライン)でプロジェクトを新規作成します。

左のブロックパレットから、
[変数]

すると、最初の状態で、
変数
この変数の横に
⬜

これで変数は最初に
0
この
変数
グローバル変数
※注)Scratch言語の実体は、ブラウザで動作しているJavascriptですので、本当の意味のグローバル変数は
document
window
ではこの
グローバル変数
スプライトを1つ追加します。

右下のスプライトパレットから、
[スプライトを選ぶ]

これでこのアプリにスプライトが2つになりました。
ではまず1番目のスプライトで以下のブロックを組んで、このブロックをクリックしてみましょう。

結果は、一番目のスプライト(ねこ)が
グローバル変数!

では、次に2番目のスプライトに移動して、以下のブロックを実行してみるとどうなるでしょう。

結果は2番目のスプライト(ペンギン)も
グローバル変数!

この結果はScratch言語ではお馴染みで当たり前の結果のように感じる方も多いでしょう。
グローバル変数
基本的に、グローバル変数はどのスプライトからでも値を書き換えたり、値を読み込んだりすることが可能です。
これは、スプライト同士の動きや状態を同調・同期させるときに非常に役立つ仕組みです。
Scratchを勉強していく上で、最初のうちはあまり難しいことを考えたくない人にとっては、すべてこのグローバル変数を使ってプログラミングをしていっても良いでしょう。
ローカル変数
もう一つ変数である
ローカル変数
先程も述べたように、このローカル変数を使わなくても、プログラミング全体をグローバル変数で作成することも可能です。
ではこのローカル変数が何のためにあるのかと言えば、
1. ローカル変数は一つのスプライトで使う変数なので、
他のスプライトからは値の読み出し・書き換えを禁止できる。
2. グローバル変数を増やしていくと、
どのスプライトで使う・使わない分からなくなる問題がある。
共有しない変数はローカル変数でまとめると、
見通しの良いプログラミングになる。
ということです。
まず
ローカル変数
ローカル変数を作るために、先程の例で、1番目のスプライト(ねこ)に戻って、以下の手順で変数を新規作成します。

上の図のように
[変数を作る]
新しい変数
このダイアログの中で、
すべてのスプライト用
このスプライトのみ
ローカル変数
ここでは名前を
ローカル変数
[OK]

ローカル変数を追加した直後は、変数のブロックパレットに
ローカル変数
プログラムキャンバスの左上には
スプライト1:ローカル変数
変数をローカル変数で追加した場合、グローバル変数とは違って、
<スプライト名>:<変数名>
ではこのローカル変数を使ってみましょう。 以下のブロックを組んで、クリックしてみます。

当然結果は、スプライト1(猫のスプライト)では、このローカル変数を使って、
ローカル変数!

そこから2番目のスプライト(ペンギン)に移ってみましょう。

注目すべきは、先程スプライト1で作成したローカル変数が、変数ブロックで消えてしまったことが分かります。
つまり、2番目のスプライトからは、1番目に属するローカル変数である
ローカル変数
他のスプライトとは共有されないのがこのローカル変数の特徴です。
他とは共有されないので、同じ名前の変数もローカル変数で定義することができます。
例えば、2番目のスプライト(ペンギン)で、
ローカル変数

プログラムキャンバスに
Penguin 2:ローカル変数
逆にグローバル変数では、同じ名前の変数をプロジェクトに追加することはできません。

ローカル変数として定義すると、定義元のスプライトからしかその変数を操作することができなくなります。

この仕組みを他のプログラミング言語では、
将来的に何かプログラミング言語を取得する際に、この知識が役立つときが来るかも知れません。
まとめ
今回は、Scratchプログラミングの変数の扱い方の基本をまとめてみました。
特に複雑なScratchアプリを作りたい場合、今回紹介したローカル変数を扱いは必須事項になるので、使い分けをよく理解しておくと良いでしょう。