レイン開発日誌152004年2月19日
プログラムを作るプログラムを設計しよう! と、その前に…… 前回、プログラムとは「4種類の文」が組み合わさってできているにすぎない ということを見たが、よくよく考えれば、実は2種類ではないかと思いついた。 まず、 1)代入文とは、 a = 3 であるが、これは、 a = 3 + 0 と考えれば、そのまま「演算文」であるといえる。 逆に、 2)演算文とは、 c = a + b であり、計算した結果を 別の変数に入れて取っておかないと 意味がないのだから、必ず「代入文」を含んでいるといえる。 ということで、 1)と2)は、「演算代入文」というひとつの種類の文として まとめられるはずである。 さてさて。 次だ。 4)繰返し文 ( w h i l e 文)とは、 w h i l e ( c < 100 ) { c = c + 10 } であるが、よくよく考えると、「繰り返し文」は非常に恐ろしい。 というのは、「繰り返し文」をヘタに書くと、 「無限ループ」になってしまうからだ。 ・無限ループの例 c = 2 w h i l e ( c > 0 ) { c = c + 10 } 上の処理は、 「 c が 0 より大きいあいだは、{ }内の処理を繰り返す」 というものだが、よくみると、{ }の処理をいくら繰り返しても、 c が 0 より小さくなることはありえない。 (だって、{ }の処理を繰り返すたびに、 c はどんどん大きくなっていくのだから) そのため、延々と永久に、{ }内の処理を繰り返すことになってしまい、 結果として、それ以上処理が進まなくなってしまうのだ。 (つまり、いつまで待っても、計算結果を出してくれない知能系が出来てしまう) それでは困るので、いっそ、 この「繰り返し文」は、知能系のプログラムから外してしまおう と思う。 それに、よくよく考えると、「繰り返し文」は必要ない。 というのは、有限の繰り返し文であれば、 「判断文 ( i f 文)」をたくさん並べれば、代用できるからだ。 3)判断文 ( i f 文)とは、 i f ( c > 4) { c = c + 10 } であるが、これをたくさん並べれば、「繰り返し文」と同等になる。 c = 0 i f ( c < 100) { c = c + 10 } i f ( c < 100) { c = c + 10 } ・・・・ i f ( c < 100) { c = c + 10 } 上の処理は、 「 c が 100より小さいときは、{ }内の処理を実行せよ」 というのが、たくさんあるため、「繰り返し文」と同等である。 しかも、判断文を無限に並べるのはもちろん無理なので、 必ず有限の繰り返しとなり、絶対に「無限ループ」にはならない というメリットがある。 とうわけで、 数値を計算するプログラムは、 「演算代入文」「判断文」の2種類が組み合わさってできているにすぎない ということがわかった。 よし、これで「4種類」から「2種類」に、文の種類が減ったから 少し考えやすくなったぞ! |
関連事項: 続く
|