Scratch 冗長的なブロックを効率的なプログラムに修正する
冗長的なプログラム
この左図の方法(プログラム)でも正三角形を描くことができますが、ここが「思考する」ポイントになります。 これでいいのか? 同じブロックが何度も登場していて、冗長的なプログラムになっているので、用意されているブロックで、もっとスマートにできないか? 考えてみます。 |
<課題>
冗長的なブロックを排除し、効率的なプログラムに修正せよ!
冗長的なブロックを排除し、効率的なプログラムに修正していきます。
- 冗長箇所を効率的に
- 何度でも描けるよう元に戻す
- 共通部分は関数化する
- 描画処理を抽象化(関数化)する
- 描画処理を終了させる
- ▽を△に修正する
- 修正が完了したら必ずテスト
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おすすめ本
▼続きはこちら
おすすめ記事
-
アンプラグド教材<レジ精算 -2(レジ袋)>
前掲のレジ精算のプログラムに対して、条件を追加したフローチャートを完成させましょう。 【課題】あなたは、スーパーで買い物をする。それをセルフではなく、 レジ係のいるレジで精算する。 【条件】ただし、割引対象の商品も […]
-
アンプラグド教材<レジ精算 -3(駐車券)>
▼続きはこちら 前掲のレジ精算のプログラムに対して、条件を追加したフローチャートを完成させましょう。 【課題】あなたは、スーパーで買い物をする。それをセルフではなく、 レジ係のいるレジで精算する。 【条件】ただし、 […]
-
アンプラグド教材<電車の乗降>
課題:あなたは各駅停車の電車に乗って、目的地A駅で降りる。 【指導1】前提条件として、『あなたと電車の動作をそれぞれ分けて描くこと。電車に乗ったところから スタートする。ただし、乗り換えはなく、A駅は終点ではない […]
-
アンプラグド教材<路線バスの乗降>
課題:あなたは路線バスに乗って、目的地A停留所で降りる。 【指導1】前提条件として『あなたと路線バスの動作をそれぞれに分けて描くこと。路線バスに乗るところからスタートする。ただし、運賃は乗車時に支払い、乗り換えはなく、A […]
-
アンプラグド教材<救命措置の流れ(AEDの使用と心肺蘇生)>
救命措置の流れ(AEDの使用と心肺蘇生) 次は、アンプラグド・プログラミングの題材にふさわしい「救命措置の流れ(AEDの使用と心肺蘇生)」です。順番が違った、やるべきことが抜けた、判断を間違えた場合、救える命も救えなくな […]
-
アンプラグド教材<横断歩道>
課題:あなたは横断歩道を“安全に”渡ります。 これまで、アンプラグド・プログラミングの課題の問題点を解消すべく、レーンやステップを組み合わせたフローチャートの描き方を述べてきましたが、次は、交差点の横断歩道を“安全”に渡 […]
アンプラグド教材<レジ精算 -2(レジ袋)>
前掲のレジ精算のプログラムに対して、条件を追加したフローチャートを完成させましょう。 【課題】あなたは、スーパーで買い物をする。それをセルフではなく、 レジ係のいるレジで精算する。 【条件】ただし、割引対象の商品も […]
アンプラグド教材<レジ精算 -3(駐車券)>
▼続きはこちら 前掲のレジ精算のプログラムに対して、条件を追加したフローチャートを完成させましょう。 【課題】あなたは、スーパーで買い物をする。それをセルフではなく、 レジ係のいるレジで精算する。 【条件】ただし、 […]
アンプラグド教材<電車の乗降>
課題:あなたは各駅停車の電車に乗って、目的地A駅で降りる。 【指導1】前提条件として、『あなたと電車の動作をそれぞれ分けて描くこと。電車に乗ったところから スタートする。ただし、乗り換えはなく、A駅は終点ではない […]
アンプラグド教材<路線バスの乗降>
課題:あなたは路線バスに乗って、目的地A停留所で降りる。 【指導1】前提条件として『あなたと路線バスの動作をそれぞれに分けて描くこと。路線バスに乗るところからスタートする。ただし、運賃は乗車時に支払い、乗り換えはなく、A […]
アンプラグド教材<救命措置の流れ(AEDの使用と心肺蘇生)>
救命措置の流れ(AEDの使用と心肺蘇生) 次は、アンプラグド・プログラミングの題材にふさわしい「救命措置の流れ(AEDの使用と心肺蘇生)」です。順番が違った、やるべきことが抜けた、判断を間違えた場合、救える命も救えなくな […]
アンプラグド教材<横断歩道>
課題:あなたは横断歩道を“安全に”渡ります。 これまで、アンプラグド・プログラミングの課題の問題点を解消すべく、レーンやステップを組み合わせたフローチャートの描き方を述べてきましたが、次は、交差点の横断歩道を“安全”に渡 […]