19.0331

for/while/do-while 文

ここでは、
  for文
  while文
  do-while文
を、学習します。

if文関連、when文 は、「条件分岐で、処理を分ける」 ために使うことが多いですが、
これらの文は、「繰り返して処理する」 ために使うことが多いと言えます。


1. for文
for文は、近頃といっても、ここ何年ぐらいかは、よく覚えていませんが、
というか、いつの間にか、簡単に書けるように、なったようです。
少し前までは、for文 の、ロジック/流れ を、追うのが、大変だったのですが、、、
特にアルゴリズムなどに使う場合、、、最近は、
一度理解すれば、割と簡単だと思います。
また、複雑なアルゴリズムのために使う場合も、サードパーティーであれ、
そのための関数が用意されている場合が多いと思います。
たとえば、シャッフル などでも。

繰り返し処理する
「やさしいKotlin入門」 にあった例ですが、
やっぱり、for文 の、例文としては、「九九」 は、ピッタリです。
ということで、ここでも、使わさせていただこうと思います。

「九九」を for文 を使ってやるとこんなに簡単に実現できます。

ただ、この例は、for文 を、ネスト/入れ子させているので、やや複雑です。

まずは、ネストさせず、九九の3の段 のみを、for文 で、実現してみましょう。

それでは、このコードを見ていきましょう。

まず、なんだこれは?と、思うと思われるのが、forの、引数/for(ここ) の、最初にある
  i
だと、思われます。

この意味は、
  var i: Int = 0
と考えましょう。
つまり、
  for のあとの、() の先頭には、
  varキーワード を使わなくても、
  変数の定義 が、出来るという 仕組み/ルール

に、なっているのです。

また、慣例として、i などが、多くのコードで使われますが、
別に、ii でも、a でも、OKです。

そして、for文 の 仕様/ルール として
たとえば、この場合、
  i が、 IntRange型リテラル/1..9 の範囲で、
  i+1 を繰り返す
のです。
また、
  i が、1 2 3 4 5 6 7 8 9 の時の、計9回
  for文 の ブロックコード/for(i in 1..9){ //繰り返すコード }
  を、実行する
ことになっています。

さて、九九のすべての段を実行するコード ですが、
  for文の 中のfor文 まで進んだ時、
  中のfor文 が、終わるまで実行され、
  ふたたび、外側のfor文 の実行に戻り...
を、繰り返すわけですね。
ゆとりがあれば、
コードを、見ながら、または、A4用紙などに、書きながら、
じっ~くりと、考えてみてください。


2. while文
while文 も、「繰り返す処理」 が、得意です。
while文 の、イメージは、こんな感じでしょうか。

while(繰り返すための条件) { // 繰り返すコード }

そして、
  繰り返すための条件 が、trueである限り
  whileブロック/{ } が、実行される
のです。

それでは、例文 を、見てみましょう。

先ほどの説明のように、
  x in 1..10
  が、trueである限り、
  whileブロック/while(x in 1..10){ //繰り返されるコード }
  が、実行される
ということになります。

for文 との違いを考えてみますに、
  条件などで、使われる 変数 は、while文部分 とは、別に自分で、定義する。
    // var x: Int = 1
  1つづつ増やす/インクリメント(x = x+1)も、while文部分 とは、別に自分で、書く。
が、あると思います。

つまり、暗黙のルール としては、
  繰り返すための条件 が true である限り、whileブロック を繰り返す
だけなので、
初めてやるには、理解しやすい気がします。


3. do-while文
do-while文 は、while文の、仲間な感じです。
イメージとしては、
  do{
    何はともあれ、最初に必ず実行されるコード
    while(条件) の、条件true である限り、繰り返される
  } while(条件)
こうです。

では、例文 を、見てみます。

それでは、ここで問題です。
「Androidアプリを作りたい!」 は、何回表示されるでしょうか?

気を付けるべきは、
  ・まず最初に1回は実行される。
  ・i の、値 は、今いくつなのか、慎重に追っていく。
  ・<= は、「左の値 が、右の値 より 小さいか、同じ ですか?」
この3点に気を付けて、考えてみてください。

正解は、こちらになります。



まとめ
  for文のコード
  while文のコード
  do-while文のコード