19.0327

if | if / else | if / else if /else

if文 とは、プログラミング において、
私は、一番重要なもの(純粋な意味で)だと思います。
なぜなら、プログラミングとは、Yesですか?、Noですか?
を、ひたすら繰り返すことによって成り立っているのですから。

この先、いろいろな 文/式 を、学習しますが、
それらの文がないとしても、if文 で、代用できるでしょう。
もちろん、非効率極まりなくなると思われるので、
だれも、そんなことをしないでしょうが。

でも、例えば、for文は、まだやっていませんが、
if文を、何回も、ネストさせれば、
for文 と同じように書けるでしょう。

今こんな説明をしたのは、if文 を、こんな風に使いましょうという気は、
全くありません。
やめた方がいいです。
言いたいのは、これから学習する 文/式 が持つ性質というのは、
基本的に、Yes/No(true/false)を、決めていくこと、、
ということが言いたいのでした。
このことを頭に入れておくと、
いろいろな 文 や 式 の気持ちが少しわかると思います。


まず、if文 の、構文 を、見ていきましょう。

  if(x) {                     
    // x==true の時、実行される    
    // x!=true の時は、実行されない。 
  }                         


ここで、実際の例を考えてみました。

このコードを実行しても、何も表示されないのは、
変数 asVersion が、2.0(Double型です)なので、3.3(これも、Double型)と、
一致しない、つまり、
  asVersion ==3.3
の、値 は、
なんだと思いますか?できれば、2通りで考えてください。
は、リンクしてください。

ということで、このコードは、
実行しても何も表示されない、ということになります。


それでは、今度は、if/else文 について、見ていきましょう。
構文は、こうなります。

if(x) {
      // x==true の時、実行される。
      // x==false の時は、実行されない。
} else {
      // x==false の時は、ここで実行される。
      // else の意味は、 x!=true / x==false なら
        // つまり、 そうでなければ という意味。
}


今の変数の名前は、今ひとつ分かりにくいので、内容的には、今の続きなのですが、
少し、変数名を変えてみましょう。
と、思いましたが、わたくし一人の、趣味の世界に入りそうなので、止めにして、
理屈だけを説明する例に、代えさせていただきます。

それは、
もし、「3で割り切れる数値であれば」、「3で割り切れます」 と、コンソール画面に出力し、
そうでなければ、「3で割り切れません」 と、コンソールに出力されるコードを、
if/else文を使って、書いてみます。
これを読んでいる方も、考えてみてください。
それは、例えば、こんなコードになります。
  (数値は、17 と、18 にしてみましょう)

それでは、このコードを、復習を兼ねて、考えてみましょう。
3,4行目:
  Int型 の、数値 17,18 を、定義しています。
6,7,8,9,10行目:
  % というのは、剰余演算子 でした。
  ある数値A を、ある数値B で、割ったときの、余りを求める方法でした。
  商(割り算の答)ではなく、余りを求めるのが、
  剰余算 の特徴です。
  また、「余りが、0」 ということは、「割り切れる」 ということを示しています。
  今のコードから、考えても分かりますね(line13)。
  あまりピンとこない方は、「TryKotlin」などで、
    fun main() { println(18%3) }
  や
    fun main() { println(17%3) }
  を、実際に試してみましょう。
  「3で割ったあまりが、下の、コンソール画面に表示されると思います。

  また、「==演算子」 については学習しましたが、
    「2. 値型 String型」 で、紹介した、変数/型 に対しては、
    「同じ内容か?を、比べる」 のでした。
    「5. いろいろな演算子 ・ 演算での落とし穴」で、
    説明した、「全く同じものかどうか?を、比べる」
    というのは、言葉通りなのですが、ピンと来ないと思います。
    「dataキーワード(dataクラス)」 のところなどで、詳しく学習しましょう。
    今の時点では、難しい話はさておいて、ここでは、要は、
    変数a の、値 17 が、3で割り切れるのかどうかを、
    17%3 が、0になるかどうか? を、使って調べています。
    ここで、もし、「0」 になるのであれば(() の中が、true になるということなので
    『17は、3で割り切れます。(line07)』 というのが、
    コンソール画面に表示されるはずです。
    ところが、17%3 は、3x5+2 で、考えても分かりますように、
    2 が、答になり、0 とは、同じになりません。
    よって、7行目/line07 は、実行されないのです。
    ここで、「3で割り切れます」 が、違うとしたら、どういうことでしょうか?
    それは、「3では割り切れない」 ということになるはずです。
    その、そうでないときはという意味を、
      else
    で、表現し、さらに、
    そのあとの{ } の中が、実行される仕組みになっています。(9行目)
    (最初の if文/6行目 が、正しい時は、7行目の、{ } の中が、実行されます。)
    
以降に関しては、同じロジックです。ぜひ、自分で、考えてみてください。


この章の最後は、 if / else if / else 文  です。

まず、構文です。

if(x) {
      // x==true の時、実行される。
      // x==false の時は、実行されない。
        // 今まで通り、x は、true または false になる、 です。
} else if(y) {
      // y で、x 以外の条件である、値/式 を、指定出来ます。
      // y が、true の時 このブロック{ から } までのこと)が、実行されます。
        // else if ブロック は、いくつでも、設定できます。
} else if(z) {
      // z で、x,y 以外の条件である、値/式 を、指定出来ます。
      // z が、true の時 このブロック{ から } までのこと)が、実行されます。
} else {
      // x,y,z の条件が、いずれも、true に、ならなかった時、この ブロック が、実行されます。
      // なお、elseブロック は、必須ではありません。
}

(なお、構文 で、使われているコードは、空白に、全角文字等含まれていますので、
 ペースト(コピーして貼り付け)としても使えません。)
(練習のためにも、自分で書きましょう。)

では、コードを書いて試してみましょう。
今度の例は、
  if:3 でも、5 でも(3 と/And/&& 5 で)割り切れる時に、実行されます。
  else if:3 か 5(3 か/Or/|| 5)で、割り切れる時に、実行されます。
  else if:21 より大きい 数値 の時、実行されます。
  else:上の三つの条件 の、どれにも当てはまらない時、実行されます。
    / 数値 は、1, 15, 18, 22 で、試します。
    / 答えを見る前に、一度、考えてみましょう。
      / コードは、4回分書かなくても、「1,15,18,22」 だけ、書きかえればいいと思います。
        / 後から学習する、関数 を使えば、もっと楽に書けますが。
    / うまくできなかったら、読み返すときに、もう一度、考えてください。

例えば、こんなコードに、なります。

このコードのロジックに関しては、今までの学習で、理解できると思いますので、
簡単に、要点だけを見ていきましょう。

この中の、4つの、 if/else if/else文 は、変数、a,b,c,d が、違うのみで、あとは、同じです。

特に、難しいところは、10行目 と 12行目 でしょう。

10行目:
  ((a % 3 == 0) && (a % 5 == 0))
の、意味するところは、
  a が、3 で割りきれ、かつ 5 で割り切れる時、true になる
ということで、true になった時、このブロック の中の、11行目 が、実行されます。
ここで、( ) が、使われています。
  (a % 3 == 0)
この意味は、ここを、先に計算する ということで、普通の算数でも、使われる方法です。

まあ、超ベテランプログラマーの方なら、演算子には、優先順位があるので、
それを熟知していて、こういうかっこ/( ) を、使わないこともありますが、
入門レベルの本では、たいてい、かっこ/( ) が、使ってあると思われます。

12行目:
ここに関しては、|| が、使ってありますが、
10行目を理解できれば、ここも理解できると思われます。

なお、And演算子/&&、Or演算子/|| に関しては、「6. 論理演算子」 で、
学習しましたので、忘れた方は、復習しましょう。
また、文字列テンプレート は、「4. 文字列テンプレート」 で、学習しました。



まとめ
この章は、 if/else if/else文 が、理解できれば、
if文if/else文 も、理解できると思われます。
if/else if/else文 は、こんな構文でした。