情報処理とは何?から、Hello Worldを各種言語で出力するまでの流れをかく、シリーズHello World以前のプログラム言語のつづきです(このシリーズは、土日に書きます)。
コンピューターは情報を処理する機械で、
情報を処理するとは、必要な入力データ(情報)をいれて、なんらかの処理をさせて、目的となる出力データ(情報)を得ることであると書きました。
で、問題は、その処理なんですが、どういう処理をさせたいかというのを書いたものがプログラムで、こんな文を使って書きます
1.処理を命令する文
2.条件によって、処理を分けるための文
単純に条件をわける文
繰り返しする文
3.変数を宣言する文
ってことを、前回までに書きました。
で、今回は、そのさき、プログラムをまとめる話を書きます。
■プログラムをまとめる
というので、プログラムを上から順番に書いていくと、同じことが何回も出てきてしまいます。
たとえば、20度づつ、ものを回転させて表示するということを考えましょう。
この場合、
1.現在のXY座標を20度回転させたときのXY座標を求めて
2.それを表示します
3.で、さらに20度回転させたときのXY座標を求めて
4.それを表示します
このとき、「XY座標を20度回転させたときのXY座標を求め」る部分と、「それを表示」する部分が、何回も繰り返し、出てきてしまいます。
そこで、この、何回も出てくる部分をまとめようという考え方がでてきました。
具体的にいうと、原点から、ある角度を回転させたXY座標を求めるという場合は、ここに書いたように、以下の処理を行います。
1.ある角度(360度で表現する)を、360で割って、それに円周率の2倍をかける
2.三角関数のsin(1で求めた値)をもとめる。これをsとする
3.三角関数のcos(1で求めた値)をもとめる。これをcとする
4.c*X座標-s*Y座標(*は乗算)を求め、それを新しいX座標とする
5.s*X座標+c*Y座標(*は乗算)を求め、それを新しいY座標とする
実際には、もともとある回転しようとするものの中心を、まずは、その原点に持ってくるという処理がさらに入るのですが、まあ、それは省略して、上の処理をしないといけません。
このとき、この5個の処理を何回も繰り返していたら大変なので
角度、X座標、Y座標を渡してください。そしたら、回転結果を返します
という処理をまとめて、つくっておいて、実際に使うときは、そのまとめた処理を呼び出すという形をとります。
■プログラムの2通りのまとめ方
そのようにプログラムをまとめる場合ですが、とくに値が1つしか返す必要がない場合と、複数の値を返して欲しい場合、あるいはまったく返してくれなくていい場合というのがあります。なんで、1つしか返さない場合を分けて言うかというと、数学的に考えたとき、そういうものを特別に扱っているからです。
数学的に、いくつかのものを入力して(もちろん、1個しか入れなくてもいい。0個というのは数学的にはないかもしれないが、コンピューター的にはカウンタや現在時刻取得である)、1つしか値を返さないものを、関数といいます。
コンピューターのプログラムの世界でも、いくつかのものをいれて、1つしか返さないものを関数(ファンクション)といい、そうでないものを、サブルーチンといいます。
Visual Basicでは、この区別ははっきりしていて、
サブルーチンはSubと、はじめにかいて、
そのまとまりのおわりには、End Subと書きます
ファンクションはfunctionとはじめに書きます。
そのまとまりのおわりには、End functionと書きます
Javaの場合には、この書き方はあいまいで、subとfunctionの区別はありません。
ただし、値を返せない場合は、返す値の型のところにvoidと書いて、値は返さないよ!
と明示します。
なお、複数の値を返す場合は、入力値を書き換えたり、呼び出したほうも、呼び出されたほうもアクセスできるところに返します。
なので、複数の値を返すサブルーチンというのはないです。サブルーチンは値を返しません。(VBのsubは、値を返さない)。
ちょっと話が複雑になってしまい、うまく、かけなかったですたが、とにかく、プログラムをまとめる方法があって、実際には、そのまとめた部分を呼び出すことによって、同じような処理を何回も書くことを防いでいるということです。
書き方については、詳しく、もっと先の機会に書きます。
次回のこのシリーズは、データのまとめ方です。