pon

日常のこととグルメなことを発信しています

世界一わかりやすい『while , do..while』文

while , do..while文とは

 

while , do...構文はループ処理を行う処理になります。

 

同じループ処理を行う構文にfor文というのがあります。while文とfor文は同じです。

 

while文を実際に出力してみる

f:id:daiki0421kun:20181119121142p:plain

 

上から順に説明していきます。

 

まず、

 var i = 0;

   i = 0と定義します。

 

次にiが10以下の時にwhile文を適用してね。という命令をします。

 

そしてコンソールに出力したいのでconsole.logを打ちます。

 

永遠ループには気をつけて

 

ここで僕も失敗したのですが

 i++;

というコマンドを打ち忘れると大変なことになります笑

見出しにもある通り永遠に0がループします。制御不能です。

 

なぜ永遠ループするのか

 

なぜ永遠ループをするのかというともう一度さっき僕がタイプした命令を見ればわかります。

f:id:daiki0421kun:20181119121142p:plain

この命令は

 

iが10以下の時にループを回してねという命令でした。

 

もうお気付きの通り。

 

i++;

がなければ10以上の数字になるはずがないので永遠にループします。

 

まあ試しになんでも試してみて自分で体験してみる方が勉強になりますが。

 

ループを止めるもう一つの方法

 

ループを止めるには

break文を打てば止まります。

f:id:daiki0421kun:20181119122339p:plain

 

i++の代わりにbreak;を打てばループを止められることができます。

 

do..while文との違い

while文とdo...while文の決定的な違いは条件判定が後に来るか先に来るかの違いです。

 

do...while文は条件判定が後に来ます。

 

文で書いても伝わらないと思うので実際に動かしてみます。

 

do..while文を実際に動かしてみる

 

f:id:daiki0421kun:20181119123052p:plain

 

これがdo...while文になります。違いがわかりますか?違いがわかるようにwhile文も下に載せておきます。

f:id:daiki0421kun:20181119122339p:plain

 

条件判定というのは

while(i < 10)です。

この位置が先に来るか後に来るかの違いです。

 

出力にも違いが出る

 

じゃあ条件判定が先に来るか後に来るかで出力結果が変わってくるの?と思うかもしれませんが結果は変わる場合と変わらない場合があります。

 

上の例ではどちらも出力結果は変わりません。一つ結果が変わる例を出してみましょう。

f:id:daiki0421kun:20181119123646p:plain

 

iが200の時には出力結果が変わってしまいます。

 

どのように変わるかというとこの結果はwhile文では何も表示されなくなりdo..while文の時だけ結果が出力されます。

 

なぜかというとwhile文においてi=200というのは条件判定の時点で条件に合致していないとみなされてしまうからです。

 

逆にdo...while文においては後に条件判定がきているためとりあえず200というのだけは出力されてしまいます。

 

それ200以降は条件に合致していないので出力されません。

 

このような違いがあります。

 

まとめ

f:id:daiki0421kun:20181006173421j:plain

今回はwhile文とdo...while文の違いについて説明しました。ぼくもまだまだ知識が足りないので補足説明や間違えていると思ったところは指摘してくれるとありがたいです。

ではでは