Scratch 冗長的なブロックを効率的なプログラムに修正する





冗長的なプログラム

この左図の方法(プログラム)でも正三角形を描くことができますが、ここが「思考する」ポイントになります。

これでいいのか?

同じブロックが何度も登場していて、冗長的なプログラムになっているので、用意されているブロックで、もっとスマートにできないか?

考えてみます。



<課題>
冗長的なブロックを排除し、効率的なプログラムに修正せよ!

冗長的なブロックを排除し、効率的なプログラムに修正していきます。

  1. 冗長箇所を効率的に
  2. 何度でも描けるよう元に戻す
  3. 共通部分は関数化する
  4. 描画処理を抽象化(関数化)する
  5. 描画処理を終了させる
  6. ▽を△に修正する
  7.  修正が完了したら必ずテスト
1.冗長箇所を効率的にスマートに修正する









同じブロックを反復ブロックで集約し、そのセット数分を繰り返し数にする。

2.何度でも描けるよう元に戻す(初期化)









・スプライトの「向き」「位置」を毎回の実行時に決定する。
・一度描いた図形を消去する。

3. 共通部分は関数化する









・[ブロック定義]を作成し、初期化部分を関数化する。
・描く図形が何であれ、必ず実行される部分を抽象化することで、
 初期化処理を意識することなく主要な処理の作成に集中できる。



4.描画処理を抽象化(関数化)する











結局○回繰り返すも、○歩動かすもどれも「描画」の処理としてまとめることができます。

左図のメインプログラムを見ると「初期化」の次に「描画処理」と抽象化されたものになっています。それぞれの役割を明確にして分類した結果です。

5.描画処理を終了させる




ペンを下ろしたままやファイルを開いたままにしておくと、パソコンのメモリをずっと使用し続けることになります。

[ペンを上げる]やファイルを閉じるなど、「メモリの解放」をしないと、処理が終わるまで無駄なメモリを使い続ける状態になるため、処理が遅くなったりメモリリークと呼ばれる強制的に処理が止まるエラーを引き起こす原因となってしまいます。

「使い終わったら片付ける」ことでバグの少ないプログラムを作ることができます。

6.逆三角形を正位置にする







関数[描画処理]側を修正するだけで、メインプログラムへの修正は必要ありません。

関数にはそれぞれの処理(役割)を任せていますので、メインプログラムには影響を与えないよう、そちらはそちらで修正すればいいという考え方です。

関数を定義する際は、そのことを想定して作成します。

7.修正が完了したら必ずテスト
必ず正常に、目的通り実行されるか検証しましょう。このくらの小さなプログラムなら実行して結果を見て検証が可能ですが、より複雑なプログラムになると、「どこをテストして、結果どうなるのが正しいのか」という「テスト仕様書」のようなものが必要になるのがわかるかと思います。何をもって正とするのか。

■ 完成したプログラム



プロパティ(特性)

実行用プログラミング言語のソースコードでは、どのようになっているのか、わかりやすくするため、関数を使わず組んだブロックで解説します。

プロパティ(特性)
 実際には、Stage や Sprite1 のプロパティに値をセットしている

▼初期値
  Sprite1.傾き = 90
  Sprite1.x座標 = 0
  Sprite1.y座標 = 0
  Stage.BackColor = #FFFFFF(全部消す:ステージを白く塗る)
  Sprite1.描画 = 1(On)

▼ループ内の処理
  Sprite1.歩数 = 100
  Sprite1.wait = 0.5(スプライトの回転動作を見やすくする)
  Sprite1.左回転 = 120
  Sprite1.wait = 0.5(スプライトの回転動作を見やすくする)

▼終了処理
  Sprite1.描画 = 0(Off)

※各プロパティに対して値を代入し、スプライトの動きや位置を変更しています。

※各プロパティの初期値(デフォルト値)が決まっており、その初期値に戻すことを「初期化」と呼びます。



xy座標を用いた描画処理

コンピュータによる図形の描画

本来、コンピュータによる図形の描画では、(x,y)の座標が大切になります。ステージを座標ステージに変更し、何歩動かすような制御ではなく、xy座標を用いた描画処理に変更すると、以下のようになります。

ここでポイントになるのは、三角形の頂点の座標が何かということになります。そこで、描画処理の繰り返し回数を2回にすることで、スプライトが頂点で停止するので、その時のxy座標をみれば、それぞれの数値がわかります。(この求め方などのように、児童へ与える思考課題を追加で作ることができます。)



 

▼Amazonおすすめ本
  

 

▼続きはこちら

おすすめ記事