19.0401

break と continue

ここでは、
  break キーワード
  continue キーワード
を、学習します。


1. break
前回やった、
  for文
  while文
  do-while文
など、繰り返して処理を行うことを、ループと言います。
今回学習する、一つ目 breakキーワード は、
  ある条件になった時
  ループを、抜けるための、命令文を実行
します。

こんな例を試してみましょう。
  5円玉が、何枚あれば、100円になるのか?
一つお断りしておきます。
このプログラムでは、
  無限ループ
と言われる、コードを実行します。
一説には、PC が、壊れるともいわれています。
本当かどうかは、お恥ずかしながら、私には、分かりません。
でも、ブラウザでやれば、無限に、動くことはないそうです。
PC の場合でも、私の浅はかな考えでは、
  タスクマネージャーを、起動させて、
  無理やり、終了させればいいと思います。
が、本当かどうかは、定かではありません。
また、
  あまりにも、メモリが少ない、PCだと、
  そもそも、タスクマネージャーを、起動できるかも分かりません。
ですので、ブラウザで、動く、TryKotlin でやることをお勧めします
もっとも、私は、IntelliJ で、実行したかったし、
このレベルなら、書き間違えない自信があったので、
IntelliJ で、実行しました。

念のための警告は、ここまでにして、
「5円玉何枚で、100円になるか?」のコードを、見てみましょう。

では、このコードのポイントを、見ていきましょう。

まず、
  無限ループ
だと言うのは、
  while (true) { //コード }
の、
  true
が、原因になっています。
よくよく考えてみたら、分かると思いますが、何しろ、while文 というのは、
  while (引数) {// コード }
の、引数が、true である限り、実行するわけです。
最初から、true なので、いつまでたっても、false には、なりません。
ですから、永久に終わらない、「無限ループ」 に、なってしまうのです。

でも逆に、このコードでは、それを利用しています。
  5円玉を、100円になるまで、1枚2枚3枚... と、数えるためです。
そして、救世主?breakキーワード が、登場します。
それは、いつ、プログラムを、止めてくれるのか?
そうです、if文 において、
  fiveYen * howMany == 100
となった時ですね。
その、if文の引数 が、true になると、
  文字列
  "5円玉が、${howMany}枚で、100円です。"
が、コンソールに出力されて、
そのあと、
  breakキーワード
が、無限ループ を、止めてくれるのです。

この例では、「そんなの、プログラムしなくても、分かります」 と、
いわれそうではありますが、
例えば、3,225円 だったら、すぐ計算できないでしょう?
なので、使い道は、やっぱり、普通はないですね。
ここでは、beakキーワード を、理解していただくために、
こんな例を使いました。


2. continue
今度のキーワードは、
  continue(継続 という意味)
です。
この、continueキーワード は、
  ある条件が成立した時、
  その時だけ、
  コードの実行をやめて、振出しに戻って、
  最初から、再び実行します。
今回は、この、continue を使って、
絶対当たらない、ジュースの自動販売機 を、
作ってみます。
本当にできるわけないので、気持ちだけ作られたと、考えてください。
また、これは、それを勧めるのではなく、
世の中には、こんなインチキもあるだろうという教訓であります。

ここでは、ラッキー7 ということで、
  7 が出たら、「あたり」 ということにします。
  そして、絶対7が出ない設定にします。

こんなコードになります。

まず、
    var counter = 0
    while (counter < 10) {
        val list: List<Int> = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
        val luckyQ = list.shuffled()
        val number: Int = luckyQ[0]
この部分ですが、2回後に予定している、「14. List」 のコード を、
使っているので、内容だけを、お話しします。
  まず、リスト(1, 2, 3, 4, 5, 6, 7, 8, 9)
  を、作ります。
  次に、1~9 の順番を、シャッフルします。 // list.shuffled()
  そして、一番最初の数値( luckyQ[0] ) を、
  変数( number ) に、代入します。

その後ですが、
そこで、選ばれた数値 number を、
  println(number)
を、使って、コンソールに表示するわけなのですが、
        if (number == 7) {
            continue
        }
このコードが、7 を、表示させないようにしています。

  なぜなら、number が、7 の時は、
    continueキーワード
  を、使って、以降のコードは、中断して、while(){}文 の、
一番最初の行である、
val list: List<Int> = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
まで、戻って、コードを、実行しなおすからです。
この自販機は、インチキ自販機です。

このように、continueキーワード は、
breakキーワード のように、
  ループを抜けるのではなく、
  最初に戻って、一からやり直す

のです。



まとめ
breakcontinue の使われたコードを見て、
その働きを確認してみてください。
  break キーワードのコード
  continue キーワードのコード