どのように実行を開始するのか?何から動き始めるのか?:Scratch3.0

Scratchのプログラムではどのように実行を開始するのか、また、実行を開始すると何から動き始めるのかなどについて説明します。

【目次】
1.ブロックは命令、スクリプトはサブルーチン
2.スクリプトはユーザーの出すきっかけで実行を開始:イベント駆動型プログラミング
2.1.スクリプトをプログラミング中などに試しで実行する方法
2.2.スクリプトを実行する方法
3.Scratchにおける暗黙の了解:緑の旗のクリックからプログラムの実行を始める
4.実行を止める方法
4.1.スクリプト内にあらかじめ実行を止めることをプログラミングしておく方法
4.1.1.そのスクリプト自身の実行だけ止める場合
4.1.2.そのスクリプトがあるスプライトの他のスクリプトの実行を止める場合
4.1.3.プログラムのすべての実行を止める場合
4.2.実行をかけたユーザーが実行中突然強制的にプログラムのすべての実行を止める方法
5.まとめ:できるだけ緑の旗のクリックによる実行のスタートを作りましょう!

1.ブロックは命令、スクリプトはサブルーチン

Scratchの命令はブロック、Scratchのサブルーチンはスクリプトです。

サブルーチンであるスクリプトは、1つ以上複数のブロックをくっつけて作ったブロックの固まりです。

下図は、ねこのスプライトに作った3つのスクリプトの例です。

1つめは、ブロック1つだけからなるスクリプト、

2つめと3つめは、それぞれ[イベント]カテゴリーのハットブロックから始まるブロック2つで構成されるスクリプトです。

2.スクリプトはユーザーの出すきっかけで実行を開始:イベント駆動型プログラミング

2.1.スクリプトをプログラミング中などに試しで実行する方法

エディターのスクリプトエリアに表示されているスクリプトを実行する方法の1つは、そのスクリプトの上でクリックする方法です。

スクリプトはクリックされるとそのスクリプトの最初のブロックから実行が始まり、そのスクリプトの中に他のスクリプトの実行を促すような内容が入っていなければ、そのスクリプトの最後の命令を実行した後に止まります。

Scratchはスクリプトをコンパイルする必要などはなく、エディターでプログラミングを始めた直後からいつでも、スクリプトを実行することができます。

Scratchは、同時に複数のスクリプトが実行されることを許しているプログラミング言語で、このような機能をマルチスレッドと言います。

マルチスレッドを実現している言語なので、クリプトエリア内のあるスクリプトをクリックして実行中に、他のスクリプトをクリックして実行し始めることも可能です。

2.2.スクリプトを実行する方法

Scratchのプログラム(プロジェクトとも言います)は、そのステージだけをブログなどに埋め込んで配布することなどが可能です。

ステージだけが埋め込まれたときの実行では、スクリプトエリアが表示できないので、(2-1)で紹介した個別にスクリプトをクリックして実行する方法は使えません。

Scratchのプログラムの中の先頭にハットブロックを付けたスクリプトは、エディターが開いているときでも、ステージだけのときでも、いつでも、イベントと呼ばれるきっかけが発生することよって実行が開始されます。

イベントは、実行を行いたいユーザーがあえて操作して発生させたり、コンピューター内の状態が何らかの原因で変わったときに発生したりするものです。

Scratchのように、イベントによってプログラムが駆動するプログラミング言語のことを、イベント駆動型プログラミング言語、または、イベントドリブン型プログラミング言語と言います。 Scratchでスクリプトをプログラミングするときは、どんなイベントによってそのスクリプトを動かし始めるかを決め、それを実現するハットブロックをスクリプトの先頭に付けます。

例えば、上図の2つめのスクリプトは、その先頭のハットブロックを見てわかるように、対象のスプライトである(ステージ上の)ねこのスプライトをクリックすると、実行が開始されます。

例えば、上図の3つめのスクリプトは、その先頭のハットブロックを見てわかるように、緑の旗をクリックすると、実行が開始されます。

ちなみに、オンラインエディターでは、緑の旗はステージの左上にあります。

以下に埋め込んだこのプログラムのステージで、緑の旗をクリックしたり、ねこをクリックしたりして実行を試してみてください。

なお、1つめのスクリプトは、先頭にハットブロックが付いていないので、イベントによって実行することはできません。

1つめのスクリプトは、エディターのスクリプトエリアがこのスクリプトを表示しているときだけ、実行できるものです(このスクリプトをクリックすると実行できます)。

1つめのスクリプトは、ねこのスプライトを座標(0,0)に移動させるブロックです。

1つめのスクリプトをプログラミング中にクリックすれば、いつでも、ねこのスプライトをステージ上の座標原点に戻すことができるので、このスクリプトはとても役に立ちます。

こちらhttps://scratch.mit.edu/projects/452947246/editor/ をクリックしてこのプログラムをエディターで表示すると、試してみることができます。

Scratchのスクリプトを動かすきっかけとなるイベントの種類は、Scratchのすべてのハットブロックを見れば確認できます。

例えば、ハットブロックが多くある[イベント]カテゴリーのブロックを見てみると、そのカテゴリーの中のハットブロックには、

  1. [緑の旗が押されたとき]ブロック
  2. [■キーが押されたとき]ブロック
  3. [このスプライトが押されたとき]ブロック
  4. [背景が■になったとき]ブロック
  5. [■>10のとき]ブロック
  6. [■を受け取ったとき]ブロック

があります。

2.の[■キーが押されたとき]ブロックの■では、キーのどれかの名前(aとかbとか右向き矢印とか)を選択することができます。

[■キーが押されたとき]ブロックは■で選択したキーが押されたときをきっかけにして実行が始まるハットブロックです。

4.の[背景が■になったとき]ブロックの■では、背景のどれかの名前を選択することができます。

[背景が■になったとき]ブロックは背景が■の背景になったときをきっかけにして実行が始まるハットブロックです。

5.の[■>10のとき]ブロックの■では、音量かタイマーを選択することができます。

[■>10のとき]ブロックは■で選択した音量またはタイマーの値が、10より大きくなったときをきっかけにして実行が始まるハットブロックです。

6.の[■を受け取ったとき]ブロックの■では、メッセージの種類を選択することができます。

[■を受け取ったとき]ブロックは■で選択したメッセージを受け取ったことをきっかけにして実行が始まるハットブロックです。

3.Scratchにおける暗黙の了解:緑の旗のクリックからプログラムの実行を始める

Scratchのプログラミングでは、“(特に深い理由がなければ)プログラムは緑の旗のクリックによって動かし始めるように作る”という、暗黙の了解(公式の決まりではない)があります。

そのため、こだわりや特別な事情がない場合は、緑の旗をクリックすることから実行を始めるように作ります。

なぜ、暗黙の了解に従うことを推奨するかと言うと、世界中の老若男女のScratchのプログラマーが同じ暗黙の了解に基づいてプログラムを作っている・・・だろうからです。

もちろん、暗黙の了解を知らない人も結構いますが、知っている人もそれなりに多く存在します。

Scratchは、子どもがプログラミングやそれを利用して様々な物事を学ぶために作られたもので、子どもだけでなく誰でも、無料で利用でき、人が作ったプログラムのコピーも編集も自由に行ってよいという約束の下で利用されています
(注:Scratchコミュニティーサイトのよくある質問ページの「ライセンスと権限」欄https://scratch.mit.edu/info/faq#permissions 参照)。

Scratchコミュニティーサイト(https://scratch.mit.edu/)ではたくさんのプログラムが共有されています。

それらのプログラムは子どもが作ったものが多いので起動方法の説明がついていないことも頻繁にありますし、40か国語以上に対応しているので日本語や英語以外の言語で説明が書かれていることもあります。

それでも、緑の旗のクリックから実行をするという暗黙の了解があるおかげで、とりあえず、緑の旗をクリックすれば動かすことができる場合がそれなりにあります。

そういうわけで、自分の作ったプログラムも誰かに見てもらいたい、実行してもらいたいと思うならば、緑の旗のクリックから作っておくことをお勧めします。

4.実行を止める方法

4.1.スクリプト内にあらかじめ実行を止めることをプログラミングしておく方法

[制御]カテゴリーの下から4つめの[■]ブロックは、スクリプトの中から実行を止めるためのブロックです。

4.1.1.そのスクリプト自身の実行だけ止める場合

あるスクリプト自身の実行を止めるためには、そのスクリプトの中で[制御]カテゴリーの下から4つめの[■]ブロックを使って、■で[このスクリプトを止める]を選択して使用します。

4.1.2.そのスクリプトがあるスプライトの他のスクリプトの実行を止める場合

スクリプトA自身の実行は止めず、スクリプトAのあるスプライトのスクリプトA以外のすべてのスクリプトの実行を止めるためには、スクリプトAの中で[制御]カテゴリーの下から4つめの[■]ブロックを使って、■で[スプライトの他のスクリプトを止める]を選択して使用します。

4.1.3.プログラムのすべての実行を止める場合

そのスクリプトからプログラム全体の実行を止めるためには、[制御]カテゴリーの下から4つめの[■]ブロックを使って、■で[すべてを止める]を選択して使用します。

4.2.実行をかけたユーザーが実行中突然強制的にプログラムのすべての実行を止める方法

スクリプトやプログラムの実行中に、とにかく、実行を止めたいときがあります。

特に、無限ループといって、無限に繰り返しを行うプログラムを作ってしまったときや、用があるのになかなか実行が止まらないときなどは、すぐにも止めたいと思うのではないでしょうか。

このようなとき、Scratchでは、赤い八角形のボタンをクリックします。

これは、ストップボタンとか、強制終了ボタンと呼ばれるもので、エディターでは、ステージの左上の、緑の旗の近くにあります。

余談ですが、赤い八角形であることの理由が、欧米の道路標識の止まれの標識が赤い八角形を使用しているからという話をどこかで読みました。

5.まとめ:できるだけ緑の旗のクリックによる実行のスタートを作りましょう!

とにかく、Scratchのプログラムの実行を開始するための最初のイベントは、できるだけ緑の旗をクリックすることから始めるようにプログラミングします。

緑の旗をクリックすることから動き始めるように作れば、プログラムの実行の開始を説明する手間が省け、より多くのユーザーに利用してもらえる可能性も増えます。

Scratchのプログラムでは、作ったスクリプトのどれか1つの先頭につけたハットブロックのイベントを発生させれば、良くも悪くも、そのスクリプトが動き始めます。

そのスクリプトを他のスクリプトの後に動くものとして用意していたのに、いきなり始めに動かしてしまった場合は、期待していない状態を作ることになります。

だから、緑の旗をクリックする以外の方法で実行を開始させるプログラムを作った場合は、実行を行うユーザーにどういうイベントで実行を開始すればよいかを何らかの方法で事前に知らせる必要があります。

また、あるスクリプトの実行を開始し、そのスクリプトの最後のブロックまで実行する中で、他のスクリプトを起動するイベントを発生させていなければ、そのスクリプトが動き終わった後、全体の実行が止まります。

別のスクリプトも動かしたい場合は、別のスクリプトを動かすイベントをそのスクリプトから発生させる仕組みをプログラミングするか、または、実行を行っているユーザーに対して画面の文字や絵などを通じて、次のイベントを発生させるように促す必要があります。

Scratchのプログラミングでは、上記のようなことを考えながら、スクリプトを作っていきます。

あえてマルチスレッドな処理を多用した場合は、スクリプトをまたがったプログラム全体の流れはフローチャートでは表せない複雑な動きになることもあります。

Scratchは、子ども向けとは言いつつ、かなり面白いものを作ることができるプログラミング言語です。

コメントを残す