2015年10月20日

PHP while文と無限ループ

«
»


1つ前の記事で、料理をテーマにwhile文を説明する際に
こんなプログラムを紹介しました。
 


<?php

while(true){ //無限に繰り返せ
	if(串をにんじんに刺してスッと入ったら){
		break; //繰返しの強制終了
	}
	//待つ
}

 
煮込み系料理の煮込み加減をwhile文を使って表しています。
ここで2つ、新しい書き方が登場しています。
今回は無限ループという現象を中心に書いていきたいと思います。

無限ループとは

無限ループとは、その名の通り、無限に繰り返す(ループ = loop)
してしまう現象です。
例えば、こんなプログラムが無限ループとなります。
 


<?php
$i = 0; //初期化する
while($i < 4){
	echo $i;
	echo "<br>"; //改行
}

実行結果

php 無限ループ

解説

スクリーンショット 2015-10-18 6.36.43
 
上図にあるように、今回のサンプルプログラムは$iの値を変化させる変化式が
記述されていません
。そのため、$iはずっと0のままとなり、永遠に$iが4以上に
なることは無く、無限にループすることになります。
 
これが無限ループです。
もう一つサンプルを見てみましょう。

サンプルプログラムその2


<?php
$i = 0; 

while(true){ //trueまたは1と書くと無限ループ
	echo $i;
	echo "<br>"; 

	$i++; //変化式

	if($i >= 4){
		break; //ループを強制終了
	}

}

実行結果

php while true

解説

今度は変化式を入れたのでちゃんと実行出来ました。
このプログラムの特徴の1つ目は whileの()の中の終了条件が「true」= 真
となっている部分です。
 
実は()の中にtrue または、 1 と書くと無限ループを意味します。
何回繰り返せばいいかが事前にわからない時、trueや1を用います。
 
特徴のもう一つはbreakです。英単語の意味どおり、break = 壊す、です。
breakと書くと強制的にループをぬけ出すことができます。
従って、先ほどのプログラムでは$iが4以上になったときに無限ループを
脱出します。
 
余談ですが、私は大学時代のプログラミングの課題で良く無限ループを
起こしていました。。。当時は無限ループを起こすと、大学院生の
ティーチングアシスタントのところにいって、無限ループを止めてもらうように
お願いしなければならなかったので恥ずかしい思いをしました。

まとめ

今回は無限ループについて書いていきました。
 

・変化式を正しく記述しないと無限ループが発生してしまう
・while()の終了条件にtrue,1と書くと無限ループに設定できる
・breakを使うことでループを強制終了することができる

【関連する記事】