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


※ 当ページには【広告/PR】を含む場合があります。
2021/09/28
【Scratch入門】SVG画像のviewportの意味とviewBox属性の使い方
合同会社タコスキングダム|TacosKingdom,LLC.

急に降って湧いたかのように始まるScratchの基礎講座の時間です。

以前このブログ記事の中では、下のリンク記事の中で、Scratchの
(グローバル)変数ローカル変数というものに触れました。

合同会社タコスキングダム|タコキンのPスクール
【Scratchで簡単なゲーム作成編②】スコアボードの作成と得点の表示

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

その記事ではこのグローバル変数とローカル変数の違いの大まかな概要だけを説明しました。

Scratch言語の重要な概念ですので、今回はこの2つの変数の違いについてもう少し詳しく考えていきます。


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

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

最初に通常の変数に関して考えてみましょう。

Scratchに慣れている方は、今更な内容ですが念の為の復習です。

まずはScratch(オンライン)でプロジェクトを新規作成します。

合同会社タコスキングダム|タコキンのPスクール

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

合同会社タコスキングダム|タコキンのPスクール

すると、最初の状態で、
変数という名前の変数が最初から一つ用意されています。

この変数の横に
(チェックボックス)があるので、これにチェックを入れてみると、プログラムキャンバスの左上に変数の表示することができます。

合同会社タコスキングダム|タコキンのPスクール

これで変数は最初に
0が入っているのが分かります。

この
変数はいわゆる普通の変数であり、Scratchアプリ内の全てのスクリプトで共有される特徴から、グローバル変数(※)と呼ぶことにします。

※注)Scratch言語の実体は、ブラウザで動作しているJavascriptですので、本当の意味のグローバル変数は
documentwindowなどの固有変数を指すのが正しいです。ただしここでは言葉じりの正しさはあまり考えても意味がないので省くことにします。

ではこの
グローバル変数がScratchアプリ上でどのように働くのか見ていきます。

スプライトを1つ追加します。

合同会社タコスキングダム|タコキンのPスクール

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

合同会社タコスキングダム|タコキンのPスクール

これでこのアプリにスプライトが2つになりました。

ではまず1番目のスプライトで以下のブロックを組んで、このブロックをクリックしてみましょう。

合同会社タコスキングダム|タコキンのPスクール

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

合同会社タコスキングダム|タコキンのPスクール

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

合同会社タコスキングダム|タコキンのPスクール

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

合同会社タコスキングダム|タコキンのPスクール

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

グローバル変数の性質は、Scratchアプリの全てのスプライト・背景で「共有」される値を持っています。

基本的に、グローバル変数はどのスプライトからでも値を書き換えたり、値を読み込んだりすることが可能です。

これは、スプライト同士の動きや状態を同調・同期させるときに非常に役立つ仕組みです。

Scratchを勉強していく上で、最初のうちはあまり難しいことを考えたくない人にとっては、すべてこのグローバル変数を使ってプログラミングをしていっても良いでしょう。


合同会社タコスキングダム|タコキンのPスクール【Pschool厳選】Scratchをしっかり学ぶためのオススメ書籍まとめ

ローカル変数

もう一つ変数であるローカル変数というものについて考えていきましょう。

先程も述べたように、このローカル変数を使わなくても、プログラミング全体をグローバル変数で作成することも可能です。

ではこのローカル変数が何のためにあるのかと言えば、

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

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

まず
ローカル変数の作成方法とその性質を確認してみます。

ローカル変数を作るために、先程の例で、1番目のスプライト(ねこ)に戻って、以下の手順で変数を新規作成します。

合同会社タコスキングダム|タコキンのPスクール

上の図のように
[変数を作る]ボタンで、新しい変数ダイアログが開きます。

このダイアログの中で、
すべてのスプライト用を選択すると、新しく追加する変数は、先程のグローバル変数になります。

このスプライトのみを選択することで、新規の変数が、ローカル変数として追加されます。

ここでは名前を
ローカル変数として、[OK]ボタンを押し、新規作成します。

合同会社タコスキングダム|タコキンのPスクール

ローカル変数を追加した直後は、変数のブロックパレットに
ローカル変数という名前で変数が追加されています。

プログラムキャンバスの左上には
スプライト1:ローカル変数という表示が付いているのも分かります。

変数をローカル変数で追加した場合、グローバル変数とは違って、
<スプライト名>:<変数名>でそのローカル変数が利用されているスプライトを判別することができます。

ではこのローカル変数を使ってみましょう。以下のブロックを組んで、クリックしてみます。

合同会社タコスキングダム|タコキンのPスクール

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

合同会社タコスキングダム|タコキンのPスクール

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

合同会社タコスキングダム|タコキンのPスクール

注目すべきは、先程スプライト1で作成したローカル変数が、変数ブロックで消えてしまったことが分かります。

つまり、2番目のスプライトからは、1番目に属するローカル変数である
ローカル変数は隠されて見えないことが分かります。

他のスプライトとは共有されないのがこのローカル変数の特徴です。

他とは共有されないので、同じ名前の変数もローカル変数で定義することができます。

例えば、2番目のスプライト(ペンギン)で、
ローカル変数という名前のローカル変数を新規追加してみると、

合同会社タコスキングダム|タコキンのPスクール

プログラムキャンバスに
Penguin 2:ローカル変数という名で新たなローカル変数が追加されたことになります。

逆にグローバル変数では、同じ名前の変数をプロジェクトに追加することはできません。

合同会社タコスキングダム|タコキンのPスクール

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

合同会社タコスキングダム|タコキンのPスクール

この仕組みを他のプログラミング言語では、
「変数スコープ」という名前で呼ばれます。

将来的に何かプログラミング言語を取得する際に、この知識が役立つときが来るかも知れません。


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

まとめ

今回は、Scratchプログラミングの変数の扱い方の基本をまとめてみました。

特に複雑なScratchアプリを作りたい場合、今回紹介したローカル変数を扱いは必須事項になるので、使い分けをよく理解しておくと良いでしょう。
記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

これからの"地方格差"なきプログラミング教育とは何かを考えながら、 地方密着型プログラミング学習関連テーマの記事を不定期で独自にブログ発信しています。

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