【Scratch入門】2つの変数(グローバル変数とローカル変数)について考える


※ 当ページには【広告/PR】を含む場合があります。
2021/09/28
【Scratch入門】SVG画像のviewportの意味とviewBox属性の使い方
タコキンのPスクール|2つの変数(グローバル変数とローカル変数)について考える


急に降って湧いたかのように始まるScratchの基礎講座の時間です。
以前このブログ記事の中では、下のリンク記事の中で、Scratchの
(グローバル)変数ローカル変数 というものに触れました。

合同会社タコスキングダム|蛸壺の技術ブログ
【Scratchで簡単なゲーム作成編②】スコアボードの作成と得点の表示

Scratchでスコアボードの作り方を中心に、ゲームとしての機能を盛り込んでいきます。



その記事ではこのグローバル変数とローカル変数の違いの大まかな概要だけを説明しました。
Scratch言語の重要な概念ですので、今回はこの2つの変数の違いについてもう少し詳しく考えていきます。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選

グローバル変数(通常の変数)



最初に通常の変数に関して考えてみましょう。
Scratchに慣れている方は、今更な内容ですが念の為の復習です。
まずはScratch(オンライン)でプロジェクトを新規作成します。

合同会社タコスキングダム|蛸壺の技術ブログ


左のブロックパレットから、
[変数] ボタンをクリックします。

合同会社タコスキングダム|蛸壺の技術ブログ


すると、最初の状態で、
変数 という名前の変数が最初から一つ用意されています。
この変数の横に
(チェックボックス)があるので、これにチェックを入れてみると、プログラムキャンバスの左上に変数の表示することができます。

合同会社タコスキングダム|蛸壺の技術ブログ


これで変数は最初に
0 が入っているのが分かります。
この
変数 はいわゆる普通の変数であり、Scratchアプリ内の全てのスクリプトで共有される特徴から、 グローバル変数 (※)と呼ぶことにします。
※注)Scratch言語の実体は、ブラウザで動作しているJavascriptですので、本当の意味のグローバル変数は
documentwindow などの固有変数を指すのが正しいです。 ただしここでは言葉じりの正しさはあまり考えても意味がないので省くことにします。
ではこの
グローバル変数 がScratchアプリ上でどのように働くのか見ていきます。
スプライトを1つ追加します。

合同会社タコスキングダム|蛸壺の技術ブログ


右下のスプライトパレットから、
[スプライトを選ぶ] により、適当なスプライトをプロジェクトに追加しましょう。

合同会社タコスキングダム|蛸壺の技術ブログ


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

合同会社タコスキングダム|蛸壺の技術ブログ


結果は、一番目のスプライト(ねこ)が
グローバル変数! と言っているようになります。

合同会社タコスキングダム|蛸壺の技術ブログ


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

合同会社タコスキングダム|蛸壺の技術ブログ


結果は2番目のスプライト(ペンギン)も
グローバル変数! と言いました。

合同会社タコスキングダム|蛸壺の技術ブログ



この結果はScratch言語ではお馴染みで当たり前の結果のように感じる方も多いでしょう。

グローバル変数 の性質は、Scratchアプリの全てのスプライト・背景で「共有」される値を持っています。
基本的に、グローバル変数はどのスプライトからでも値を書き換えたり、値を読み込んだりすることが可能です。
これは、スプライト同士の動きや状態を同調・同期させるときに非常に役立つ仕組みです。
Scratchを勉強していく上で、最初のうちはあまり難しいことを考えたくない人にとっては、すべてこのグローバル変数を使ってプログラミングをしていっても良いでしょう。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ

ローカル変数



もう一つ変数である
ローカル変数 というものについて考えていきましょう。
先程も述べたように、このローカル変数を使わなくても、プログラミング全体をグローバル変数で作成することも可能です。
ではこのローカル変数が何のためにあるのかと言えば、

            1. ローカル変数は一つのスプライトで使う変数なので、
    他のスプライトからは値の読み出し・書き換えを禁止できる。

2. グローバル変数を増やしていくと、
    どのスプライトで使う・使わない分からなくなる問題がある。
    共有しない変数はローカル変数でまとめると、
    見通しの良いプログラミングになる。

        

ということです。
まず
ローカル変数 の作成方法とその性質を確認してみます。
ローカル変数を作るために、先程の例で、1番目のスプライト(ねこ)に戻って、以下の手順で変数を新規作成します。

合同会社タコスキングダム|蛸壺の技術ブログ


上の図のように
[変数を作る] ボタンで、 新しい変数 ダイアログが開きます。
このダイアログの中で、
すべてのスプライト用 を選択すると、新しく追加する変数は、先程のグローバル変数になります。

このスプライトのみ を選択することで、新規の変数が、 ローカル変数 として追加されます。
ここでは名前を
ローカル変数 として、 [OK] ボタンを押し、新規作成します。

合同会社タコスキングダム|蛸壺の技術ブログ


ローカル変数を追加した直後は、変数のブロックパレットに
ローカル変数 という名前で変数が追加されています。
プログラムキャンバスの左上には
スプライト1:ローカル変数 という表示が付いているのも分かります。
変数をローカル変数で追加した場合、グローバル変数とは違って、
<スプライト名>:<変数名> でそのローカル変数が利用されているスプライトを判別することができます。
ではこのローカル変数を使ってみましょう。 以下のブロックを組んで、クリックしてみます。

合同会社タコスキングダム|蛸壺の技術ブログ


当然結果は、スプライト1(猫のスプライト)では、このローカル変数を使って、
ローカル変数! と言うことができます。

合同会社タコスキングダム|蛸壺の技術ブログ


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

合同会社タコスキングダム|蛸壺の技術ブログ


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

合同会社タコスキングダム|蛸壺の技術ブログ


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

合同会社タコスキングダム|蛸壺の技術ブログ


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

合同会社タコスキングダム|蛸壺の技術ブログ


この仕組みを他のプログラミング言語では、
「変数スコープ」 という名前で呼ばれます。
将来的に何かプログラミング言語を取得する際に、この知識が役立つときが来るかも知れません。


合同会社タコスキングダム|蛸壺の技術ブログ【Pschool厳選】Scratchを学べるオンライン・駅前プログラミングスクール5選

まとめ



今回は、Scratchプログラミングの変数の扱い方の基本をまとめてみました。
特に複雑なScratchアプリを作りたい場合、今回紹介したローカル変数を扱いは必須事項になるので、使い分けをよく理解しておくと良いでしょう。