pico(Orangino)でサブルーチンを使ってみます。前回のタートルグラフィックスと組み合わせて、図形をアニメーションさせます。プログラムで何か処理を行う場合、メイン(主)となる部分があります。プログラム作成に慣れていないと、とにかく上から下まで長い長いコードを書いてしまう人もいます。すべてがメインプログラムということがあります。短いプログラムであればメイン部分しかないこともあります。簡単なスクリプト系では、メイン処理だけで十分というのもあります。プログラムが長くなると見通しが悪くなります。同じ処理を何度も描くというのは非効率的です。修正でも全体を見渡して確認しなければならず、どこでミス(修正しなかった等)が発生するか分りません。そんな時は、同じような処理はまとめておくのがセオリーです。多くのプログラム言語では、処理をまとめておく機能があります。それは関数だったり、クラスだったりするわけです。古い時代のBASICにも処理をまとめておき、呼び出すことができる機能があります。それがサブルーチンです。メインルーチンに対して「サブ」のルーチンということです。古い時代のBASICは、大規模なプログラムどころか、中規模なプログラム開発にも向いていません。多くの言語が備えている機能がないためです。ローカル変数がないため、サブルーチンを呼び出すにしてもグローバル変数を使い回すことになります。(もちろん、工夫次第でローカル変数のようなことはできます)逆に大規模、中規模のプログラムを作らなければ、どうにかなる範囲だともとらえることができます。BASICではメインルーチンとサブルーチンの区別がなく、自分で行番号で管理することになります。10〜100行までがメインルーチンで、2000行以降はサブルーチンにするという感じです。サブルーチンはキリのいい番号から始めるようにすると、多少プログラムを把握しやすくなります。サブルーチンは、gosubを使って指定した行番号以降の処理を呼び出します。呼び出した次の処理に戻るには、returnを使います。それでは簡単なサブルーチンを作って呼び出してみましょう。以下のプログラムは、100行目以降がサブルーチンになっています。単純にaとbの変数を掛け算した結果を表示するだけの、シンプルなサブルーチンです。returnこのプログラムを実行すると、以下のように表示されます。101530この程度の処理では、サブルーチンのありがたみはありません。そこで、前回やったタートルグラフィックスと組み合わせてみましょう。以下のプログラムは、100行以降が星を描くサブルーチンです。実行するとグラフィックス画面に、ランダムに星が描かれていきます。return星をランダムに回転させて描画する場合、サブルーチンの変更はありません。メインルーチンで回転角度を指定するだけです。サブルーチンは、なるべく変更しないようなプログラムを書いておくのがポイントです。ここらへんはどうしても経験がものを言うことがあります。return今度は星が回転するアニメーションですが、やはりサブルーチン部分の変更はありません。return星が回転し、さらに拡大するアニメーションの場合、サブルーチン側で移動量を角度に合わせて変更します。ここらへんは、どうしてもメインルーチンで使われている変数(deg)に依存してしまいます。ここらへんはBASICの仕様上、仕方ない部分もあります。return【古籏一浩】openspc@alpha.ocn.ne.jphttp://www.openspc2.org/http://www.openspc2.org/雨降りすぎて畑に入れず草だらけに。晴れないとどうしようもない状態です。そんな雨にもかかわらず、のこのこやってくるのが猫のマイケル。他の猫もやってくるのですが、玄関前に鎮座し俺の家だと言わんばかりの振る舞い。気が弱いのに、結構ずうずうしい。おまけに、どうにかして家の中に入ろうと目論んでる。その目論見はミッションインポッシブル(?)。無理なのだよ、マイケル。高笑いしていたら、何か違う事態に。玄関ドアをあけようとすると、すぐにマイケルが入ろうとするため、自分や家族が家に入れない。記事)川合和史@コロ。