<?xml version="1.0" encoding="Shift_JIS" ?>
<doc>
<title>while ステートメント</title>

<para>
<ptitle>while ステートメント</ptitle>
　<kw>while</kw> ステートメントは、指定された条件が真である間、ステートメントまたはブロックを繰り返し実行するものです。ループを作成することができます。<r/>
　構文は以下の通りです。<r/>
<bq>
while(expression)<r/>
	ステートメントまたはブロック<r/>
</bq>
<r/>
　「ステートメントまたはブロック」は、条件式である expression が真である限り、繰り返し実行されます。<r/>
<r/>
　動作としては、<r/>
(1) まず、expression を評価し、偽であれば、ステートメントまたはブロックは実行されない<r/>
(2) ステートメントまたはブロックを実行する<r/>
(3) expression を評価し、その結果が真ならば (2) へ、そうでなければ while ステートメント終了<r/>
<r/>
　つまり、最初から expression が偽の場合はステートメントまたはブロックは実行されません。また、常に expression が評価されるわけではなく、ステートメントまたはブロックを一回実行するごとに expression の真偽がチェックされます。<r/>
　また、(3) の時点で、ブロックの場合はいったんブロックから抜けます ( 変数などは消去されると言うこと )。<r/>
<example>
	while(func()) ;<r/>
	/* func() が真の間、何もしないで func() を評価し続ける */<r/>
<r/>
	while(func()) i++;<r/>
	/* func() が真の間、i++ を実行し続ける */<r/>
<r/>
	while(i &lt; 5) // i が 5 より小さい間<r/>
	{<r/>
		func(i);<r/>
		i++;<r/>
	}<r/>
</example>
</para>

<para>
<ptitle>break</ptitle>
　break ステートメントは、while を途中で終了させたい場合に記述します。<r/>
<example>
	while(true) // break が実行されない限りは無限ループ<r/>
	{<r/>
		if(func()) break; // func() が真ならばwhile終了<r/>
		func2(); // ↑で break が実行されなければここにくる<r/>
	}<r/>
	// break が実行されると、ここにくる<r/>
</example>
</para>

<para>
<ptitle>continue</ptitle>
　continue ステートメントは、途中で、条件式の評価からやり直したいときに記述します。<r/>
　continue が実行されると、(3) に実行が移ります。<r/>
<example>
	var i = 0;<r/>
	while(i &lt; 5)<r/>
	{<r/>
		if(func1()) continue;<r/>
		// func1() が true ならば、i &lt; 5 の条件式チェックがされ、真ならば<r/>
		// またブロックの先頭から実行される<r/>
		func2();<r/>
		i++;<r/>
	}<r/>
</example>
</para>

<para>
<ptitle>do〜while</ptitle>
　do〜while ステートメントは、while ステートメントと同じですが、最初に条件式のチェックを行いません。<r/>
　構文は以下の通りです。<r/>
<bq>
do<r/>
	ステートメントまたはブロック<r/>
while(expression);<r/>
</bq>
<r/>
　最初に条件式をチェックしないため、do の時点で条件式が偽でも「ステートメントまたはブロック」は実行されます。<r/>
　いったん「ステートメントまたはブロック」が実行されれば条件式がチェックされ、偽ならばループを抜け、真ならば再びステートメントまたはブロックが実行され、これを繰り返します。<r/>
</para>
</doc>

