forは繰り返しごとに変化するような仕組みを構文の中に持っています。が、もっと単純に「条件をチェックして繰り返すかどうか決めるだけ」というシンプルな繰り返し構文もあります。それが
while文です。
whileは、条件のつく場所によって異なる2つの書き方があります(後者は
do while文といわれたりします)。
●whileの基本形while 条件となるもの {
……繰り返す処理……
}
●do whileの基本形do {
……繰り返す処理……
} while 条件となるもの
whileの後に条件となるものを用意します。この条件が
trueであれば繰り返しを実行し、
falseになれば繰り返しを抜ける、という単純なものです。
単純でありながら、なぜ2つの書き方があるのか。それは、条件をチェックするタイミングの違いです。前者(構文の最初に
whileがあるもの)は、まず
whileのあとにある条件をチェックし、それが
trueならば以下の{}部分を実行します。
後者(構文の最後に
whileがあるもの)は、繰り返し行う{}の部分をまず実行し、終わってから
whileの条件をチェックします。ということは、最初から条件が
falseであったとしても、必ず1度は{}部分を実行してしまう、ということになります。
例えば、簡単な繰り返しを比較してみましょう。
var n:Int = 0
while 10 > n++ {
"index:" + String(n)
}
var m:Int = 0
do {
"index:" + String(m)
} while 10 > m++
前者では、
index:1〜index:10という形で値が得られます。これに対し後者は、
index:0〜index:9という形になります。条件のところで
++で変数を増やしているため、条件が前にあるか後にあるかで数字がずれるのですね。
こんな具合に、細かな動作を見れば、両者は微妙に違ってきます。個人的には、基本は
whileで書く、
do whileは特別な事情のある場合のみ使う、と考えておけばいいように思います。