†Sibylのお部屋†

【Sibyl】ループ制御

作成開始日 2009.10.15
最終更新日 2009.10.15

基本的なループ文

Pascal系言語には、次の3種類のループがある。このあたりはPascal/Delphiの基本なので、てきとーな書籍などで簡単に確認可能。なお、WhileとRepeatの最大の違いは、継続条件の真偽と、条件判断をする場所。Whileは条件次第では一度も実行されないことがあるが、Repeatは条件如何に拘らず、必ず一度は実行される。

ループの空回しと脱出

「脱出」というのは、その時点で強制的にループから飛び出すこと。「空回し」と言うのは、それ以降の命令を実行せず、ループの先頭に戻ること。

正確に言うと「空回し」でもNext(制御変数のインクリメント)やUntil(継続条件のチェック)が実行されるから、「先頭」じゃなくて「末尾」に飛ぶのだろうが、イメージ的には「先頭」。ま、そのイメージに落とし穴があるとも言えるんだが…

「脱出」と「空回し」は、ループ制御の際には非常に便利な機能だが、どうも

標準Pascalに存在しない

ようだ(あまり自信はないが)。構造化の観点から言えば不要な−−あってはならない、命令なのかもしれないが、思考プロセスを素直にコードに反映させるには不可欠だと思う。てんで、Sibylではちゃんと用意されている。

脱出  Break
空回し Continue

これ、Object Pascal(Delphi)あたりから導入されたのかな? TURBO Pascal 6.0のマニュアルには載っていない。ちなみに、Breakによく似たイメージの命令にExitがあるが、これはループではなく、ルーチン自体から脱出してしまうので注意。

ファイル情報の読み出しとループ

ファイル情報(ファイル名、日付、サイズetc)の読み出しには、FindFirstやFindNextを使う。ディレクトリ内のすべてのファイル情報を読み出すには、FindNextをループで回す(詳細は別項参照)。この際に問題なのは、情報読み出し命令がFindFirstとFindNextの二種類になってしまっているため、Continue命令が非常に使いにくいこと。普通に使うと無限ループにしてしまう可能性大。…まあ、実際のコードをいじってみないと、何を言っているのか判らないとは思うが、

FindNextループ内ではContinueは使わない

と覚えておくとよい。


【Sibylのお部屋目次】 【ホーム】