5. 制御構造


5.1 if ブロック

pointer における制御構造(if や while、 for)は、 ほぼ perl と同じ形をしています。 たとえば if ブロックは

if ( 文A ) {
   文B1
   文B2
} else {
   文C1
   文C2
}

という形に書けます。
if ブロックにさしかかると、 pointer はまず文Aを評価します。 もし文Aの値が「真」をあらわす値(「値、変数」の章を参照)なら、 文B1、文B2が実行され、 そうでなければ文C1、文C2が実行されます。 もちろん else 以降はなくてもかまいません。 さらに else 節もなく、ブロックの中に一つしか文のない場合には
if ( 文A ) 文B
という書き方もできます。
さらに、いくつもの条件判断を続けて行ないたい場合は else に続けて if 文をつなげることができます。

if ( 文A ) {
   文B
} else if ( 文C ) {
   文D
} else {
   文E
}

この場合、文Aが真なら文Bを実行し、 文Aが偽で文Cが真なら文Dを実行、 どちらも偽の場合は文Eを実行します。

5.2 while ブロック、for ブロック

くりかえしのためのブロックには while ブロックと for ブロックがあります。 while ブロックの構文は簡単で、

while ( 文A ) {
   文B
   文C
}

と書けます。 こう書くと文Aが真である間、ブロックの中にある 文B、Cをくりかえし実行します。

for ブロックは繰り返し回数が決まっている時などによく用います。


for ( 文1; 文2; 文3 ) {
   文A
   文B
}

for ブロックに入る前に、pointer はまず文1を実行します。 次に文2が真であるかどうかを調べて、 真であればブロックの中身を実行します。 そして一回ブロックを実行するごとに文3を実行し、 ふたたび文2のチェックをして真ならブロックを繰り返します。 実際には

for ( $i=1; $i<=10; $i++ ) {
   echo $i;
}

などのように使います。 この時、$i=1 からはじめて 10 まで 1 づつ増やしながら、 毎回 $i の値を(echo コマンドで)出力します。

while や for などのブロックは、 break コマンドを使えばループの途中でも抜け出すことができます。 たとえば、


while ( 1 ) {
   echo "text aaa.";
   echo "text bbb.";
   break;
   echo "text ccc.";
}

とすると break の行でループを抜けてしまうので、 画面には
text aaa.
text bbb.
とだけ表示されます。

また、continue コマンドを使った場合、 ループの残りの部分を飛ばしてループを繰り返します。


for ( $i=1; $i<=5; $i++ ) {
   echo "***";
   if ( $i==4 ) continue;
   echo $i;
}

というプログラムがあった時に、

***
1
***
2
***
3
***
***
5

と表示されます。 なぜかというと、 $i が 4 の時は continue 文が実行されて 次の echo $i の行が飛ばされ、 すぐに $i=5 のループになってしまうからです。