プログラミングテクニック

スクラッチの並列処理は、手前のスプライトから処理される!?

スクラッチでは、複数のスプライトのプログラムを同時に処理することができます。

ただし、複数のスプライト間で共通の変数とリストを使う場合は、注意が必要です。

こちらでは、スクラッチの並列処理と、注意点を説明しています。

スポンサーリンク

並列処理?

プログラミングの世界では、処理を同時に並列して行うことを「並列処理」といいます。

例えば、こちらは、緑の旗をクリックすると、アナログ時計が現在の時刻を示すプログラムです。

「時針」「分針」「秒針」を、それぞれスプライトにしています。

(画像をクリックすると大きくなります。)

こちらが、それぞれのスプライトのプログラムです。

3つのスプライトとも「緑の旗が押されたとき」にプログラムが実行され、「ずっと」ブロックで、ぐるぐると反復処理をしています。

このように3つのプログラムの処理を処理を同時に並列して行うことを「並列処理」といいます。

ただし、同時といっても、スクラッチでは、一緒に処理をしているわけではありません。

スクラッチでは、それぞれの処理を高速で切り替えながら、1処理ずつ行なっています。

それでも同時に処理されているように見えるのは、プログラムの処理が高速で、人間の目では捉えられないほど速いからです。

アナログ時計のプログラムで、どのスプライトが先に処理されているのか、まったく分かりませんよね。

それぐらい、プログラムの処理の速度は、高速です。

スクラッチでの並列処理の順番は?

では、実際にスクラッチでの並列処理は、どのような順番で処理されているでしょうか?

先に答えを言うと、一番上にあるスプライトから順に処理されています。

一番上とは、一番上の層つまりレイヤーのことです。

レイヤーとは?

レイヤーとは、透明の画用紙のようなもので、スクラッチでは、レイヤーのことを「層」と表現します。

具体的にレイヤーとはどのようなものなのか確認してみましょう。

スクラッチの新しいファイルを開いて、「スプライトを選ぶ」からスプライトを追加します。

今回は、リンゴ(Apple)を追加しました。

すると、リンゴがスクラッチキャット(スプライト1)の上に重なっているのが分かります。

つまり、1層目のレイヤーにリンゴ、2層目のレイヤーにスクラッチキャットがいるということです。

もう一つバナナ(Bananas)のスプライトを追加しました。

今度は、バナナが一番前でリンゴ、スクラッチキャットの順で重なっているのが分かります。

今度は、1層目のレイヤーにバナナ、2層目のレイヤーにリンゴ、3層目のレイヤーにスクラッチキャットとなりました。

現在の層では、「バナナ」「リンゴ」「スクラッチキャット」の順にプログラムが処理されます。

並列処理の順番を確認

実際に、スクラッチでの並列処理の順番を確認してみましょう。

まず、変数「x」を作って、中身を空にしておきます。

次に、それぞれのスプライトのプログラムは、このようにします。

こちらでは、緑の旗が押されたときに、変数「x」にスプライトの名前を付けたす処理をしています。

1層目のレイヤーに「バナナ」、2層目のレイヤーに「リンゴ」、3層目のレイヤーに「スクラッチキャット」の順番で、緑の旗をクリックすると、このような結果になりました。

変数xの中身を確認すると「|Bananas|Apple|スクラッチキャット」となっていますよね。

つまり、レイヤの順番と同じ、「バナナ」「リンゴ」「スクラッチキャット」の順に処理されたということです。

今度は、1層目のレイヤーに「リンゴ」、2層目のレイヤーに「スクラッチキャット」、3層目のレイヤーに「バナナ」の順番で、緑の旗をクリックすると、このような結果になりました。

こちらも、レイヤーの順番で処理されているのが、分かります。

このように、スクラッチの並列処理は、レイヤーの順番で処理されるので、共通の変数を使う場合は、変数の値が意図しない値になることもあります。


その場合は、ローカル変数を使うか、「▢へ移動する」「〇層▢(レイヤー)」ブロックを使って、レイヤーの順番を指定するようにしましょう。

スクラッチの処理について詳しく知りたい方は、「スクラッチはマルチスレッド!処理の優先順位を徹底解説!」で詳しく解説していますので、こちらも確認しましょう。

まとめ

ここまで、スクラッチの並列処理と、注意点を説明しました。

スクラッチの並列処理では、変数だけでなく、リストを使う場合も注意が必要なので、気を付けましょう。