子供向けプログラミング言語Scratch(スクラッチ)-Scratchはエラーにおおらかなプログラミング言語:0割り,ステージからのはみ出し:Scratch3.0

子供向けプログラミング言語 Scratch(スクラッチ)のエラーに関するお話しをします。

【目次】
1.Scratchのエラーへの対応
1.1.エラーを出さないプログラム:例1.0割り
1.2.エラーを出さないプログラム:例2.ステージからのはみ出し
2.まとめ

1.Scratchのエラーへの対応

エラーとは、コンピューターを使う中で出てきた誤りのことです。

また、デバッグとは、間違っている箇所を探して修正する作業のことです。

Scratchはエラーに関して非常におおらかな対応をするプログラミング言語です。
エラーメッセージや警告音などがほとんど出されません。
エラーが出たときに、プログラムの実行がシステムから強制終了されることもめったにありません。

これは、多分、子供向けに作られた言語だから。
Scratchは間違いの指摘が少ないので、子供が、そして、大人も、めげることなく試行錯誤を繰り返すことができるプログラミング言語です。

一般にプログラミング言語のシステムは、エラーを見つけるとエラーメッセージを出したり実行などを途中で強制的に止めたりします。
これは、コンピューターをプログラムによって壊さないようにするためであって、この仕組み自体はとても大事なものですが、初心者には少しきつく感じることもあります。

Scratchは結果を及ぼせる範囲が音やステージへの画像の出力などに限定されているので、コンピューターをプログラムから守りやすくなっているのだろうと想像できます。
子供が雑に作るプログラムでもできる限り最後まで動かしてくれるので、頻繁にエラーを指摘されることによって必要となるデバッグなどのわずらわしさやバツの悪さなどから子供がやる気や自信を失ってしまうような心配がなく、安心して学習を続けさせられるプログラミング言語です。

Scratchがエラーをあまり出さないことを示す、具体的な例をIT企画研究所が作ってScratchコミュニティーサイトから公開(共有)している2つのプログラム
・例1 URL https://scratch.mit.edu/projects/110704614/
・例2 URL https://scratch.mit.edu/projects/110704242/
で見ていきます。

スポンサーリンク

1.1.エラーを出さないプログラム:例1.0割り

1つめのプログラム例1 URL https://scratch.mit.edu/projects/110704614/ は、整数の0割りを3回行います。

一般に、ソフトウェアでは、整数割る0が行われるとエラーが出し、ソフトウェアの実行を強制終了したり、そのプロセスの実行を強制終了するものがほとんどですが、Scratchは整数割る0に対して控えめな主張しかしないことをこのプログラム例で見てみます。

一般的なプログラミング言語ではデータ型を厳格に区別して使用することが要求されます。
例えば、10や0、-10は整数であり、整数同士の演算では結果も整数になります。
Scratchではデータ型を柔軟に適用し、今回のこれらの(整数同士の演算の)計算結果を、ほとんどのCPUやソフトウェアなどで採用されているIEEE 754(IEEE浮動小数点数演算標準)での結果と同じにしてくれます。
具体的にIEEE754では、浮動小数点xを使った計算で、xが正のとき、x/0は無限大(infinity)、xが0.0のとき、x/0は数でない(NaN:Not a number)、xが負のとき、x/0は-無限大(-infinity)がその結果となります。
全体的にも、Scratchはデータ型を柔軟に扱うプログラミング言語です。

では、1つめのプログラム例1を実行してみましょう。
プログラム例1の URL https://scratch.mit.edu/projects/110704614/ をクリックすると、プロジェクトページと呼ばれる、このプログラムの実行方法の説明([使い方])とステージがあるページが開きます。

プロジェクトページからは、ステージど真ん中に表示される緑の旗をクリックして実行します。

IT企画研究所が作って共有にしておいたこのプログラムを、プロジェクトページからオンラインエディターで開くには、プロジェクトページ右上にある[中を見る]ボタンをクリックします。
オンラインエディターで開けば、このプログラムのスクリプトも見ることができます。

このプログラムは、実行が始まると、実行の終わりまで他の操作は必要ありません。

このプログラムでは、変数xの値を10、0、-10に変え、xを割る数、0を割られる数にして、割り算を3回行い、割り算のたびにその計算結果を変数xに代入します。
xの値はステージ左上に常時表示されています。

まず、10/0を行います。
浮動小数点xを使った計算で、xが正のとき、x/0は無限大(infinity) となり、ステージ左上のxの値は「infinity」と表示されます。

次に、0/0を行い、ねこの色の効果を変えます。
xが0.0のとき、x/0は数でない(NaN:Not a number)となり、 ステージ左上のxの値は「NaN」と表示されます。

最後に、-10/0を行い、ねこの色の効果を変えます。
xが負のとき、x/0は-無限大(-infinity) となり、ステージ左上のxの値は「-infinity」と表示されます。

1.2.エラーを出さないプログラム:例2.ステージからのはみ出し

2つめのプログラム例2 URL https://scratch.mit.edu/projects/110704242/ は、ねこのスプライトを永遠に右に進めます。
普通であれば、永遠に一方向に進め続けるプログラムはエラーです(止める仕組みが入っていないからです)。

一般に、他のプログラミング言語では、ある値などが永遠に増え続けたり減り続けたりするプログラムを作って実行すると、ある限度に達したとき、ある種のエラーとして強制的に実行にストップがかかります。

一方、Scratchでは、子どもたちに混乱を与えないように、エラーでもできるだけシステム側が実行を止めない作りになっています。

例えば、Scratchでは座標の上限の値を超えるようなプログラムを作ってもプログラムをなるべく強制的に止めることなく、実行を続けられるような仕組みになっています。
実際の見た目の動きでは、スプライトはステージの右側の端に達した後そのまま見えなくなるわけではなく、ステージ右端にスプライトの左の絵柄を少し残して居続けます。
このとき、x座標の値をプログラムで増やす処理を繰り返しても、すなわち、x座標に正の値を足して代入することを繰り返しても、x座標の値はある値以上には増えていません。

そこで、是非覚えていただきたいのは、自分で開始したプログラムの実行を途中で止める方法です。
Scratchには、実行を途中で止める強制終了ボタンが用意されています。
強制終了ボタンは、ステージ左上にある赤い八角形のボタンです。
Scratch3.0になってからの強制終了ボタンは、エディターのステージでもプロジェクトページのステージでも、それぞれのステージ左上にあります。
プログラムの実行の途中に強制終了ボタンをクリックすれば、実行を終了させることができます。

この仕組みを使って、一旦実行を止め、プログラムを修正して、また実行し直すことを繰り返します。

なお、補足ですが、この例2の場合は、別の問題を考える必要もあります。
プログラムを再度実行したいとき、その前にスプライトの位置を元の位置(の近くなど)に戻す問題です。

Scratchでは、1つ手前の実行が終了しても、スプライトの座標位置などいくつかの項目は次の実行にそのまま引き継がれます。

このプログラム例2のように座標位置については、ステージ右側に少しでもスプライトの絵柄が見えていれば、そして、現在作業している画面がエディター内であれば、その絵柄の一部をドラッグ&ドロップして、スプライトをステージの真ん中など適当な位置に戻すことができます。

今回は凹凸のあるねこの形のスプライトであったため、幸いにもねこの左側の絵柄(しっぽの一部)が右端に残り続け、エディター内ならばドラッグ&ドロップで位置を戻すことができます。
ところが、これが四角いスプライトなど左部分がまっすぐな形などでは絵柄がほとんど見えず(細ーい線が見えている程度など)、ドラッグできるほどステージ上にスプライトの絵柄の一部が残らないことがあります。

また、ステージの端にスプライトの一部の絵柄が残っている場合でも、そもそもドラッグ&ドロップでステージ内を移動できないときがあります。
スプライトをドラッグ&ドロップしてステージ内を移動できるのは、エディターのステージか、または、事前にエディターでそのスプライトに対して[調べる]カテゴリーの[ドラッグできるようにする]ブロックを使って、どのステージでもそのスプライトをドラッグ&ドロップで移動することができる設定にしているときだけです。
それ以外の場合は、ドラッグ&ドロップしてステージ内のスプライトの位置を変えることはできません。

そこで、プログラム例2では、ねこのスプライトを位置付ける方法をスクリプトとしてプログラム中に作りこんでいます。
具体的には、スペースキーを押したら、いつでもねこのスプライトの中心を座標(0,0)に移動するように作ってあります。

このあたりの詳細については、ブログ記事「実行開始時の絵の位置を決める方法」 をご参照ください。

今回用意したプログラム例2のように、スプライトを適当な位置(今回は座標(0,0))に移動させるためだけのスクリプトをあらかじめ作っておくと、エディターの中だけではなく、埋め込みのステージなど、どのステージであっても移動させることができるので便利です。

では、2つめのプログラム例2を実行してみましょう。
プログラム例2のURL https://scratch.mit.edu/projects/110704242/ をクリックすると、IT企画研究所が作って共有にしたこのプログラムのプロジェクトページが開きます。

緑の旗をクリックして実行を開始します。

実行を止めたいときは、ステージ右上の赤い八角形のボタンをクリックします。

ねこのスプライトを真ん中(座標(0,0))に戻したいときは、スペースキーを押します。

プログラムの中が見たい場合は、プロジェクトページの[中を見る]ボタンをクリックすると、このプログラムがオンラインエディターで開きます。

2.まとめ

Scratchは、極力エラーへの反応を出さない仕様になっています。
安心して大胆なプログラムを子供たちと共に作ってみてください。

スポンサーリンク

コメント

スポンサーリンク