***HPクリエイターのためのCGI講座 第24回***
4.7 next,last,redo


ループ構造を使っていると、強制的にループをやり直したり、抜け出したりしなければならない事が発生します。
その方法を解説します。

<next>
nextを実行するとそれ以降のループブロックを飛ばし、強制的にループを繰り返します。
=例=
for($cnt=0;$cnt<10;$cnt++){
    if(5 == $cnt){
        next;
# $cntが5になると、print文を実行せずループの先頭へ
    }
    print $cnt;
# 順次 0 1 2 3 4 6 7 8 9を出力(5は出力しない)
}


<last>
強制的にループから抜けます。
=例=
for($cnt=0;$cnt<10;$cnt++){
    if(5 == $cnt){
        last;
# $cntが5になると、ループから抜ける
    }
    print $cnt;
# 順次 0 1 2 3 4 を出力(5以上は出力しない)
}


<redo>
ループブロックの先頭に戻ります。
nextの場合は、for文の条件判定や、ループ毎処理(例の場合$cntの1up)が実行されますが、redoの場合はこれらの処理を通らずに、ループします。
=例=
for($cnt=0;$cnt<10;$cnt++){
    if(5 == $cnt){
        redo;
# $cntが5になると、print文を実行せずループブロックの先頭へ
    }
    print $cnt;
# 順次 0 1 2 3 4 を出力(5以降は出力しない)
}
この例の場合、$cntの1upの処理がされなくなるので、永久にループから抜けません。
CGIプログラムの場合、「redo文」は殆ど使うことはないでしょう。


演習プログラムの虫食いのところを、色々変えて確認してみてください。


********************************************************************************
講師:ALK alk@arkland.co.jp
運営:アークランド(株) http://www.arkland.co.jp