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文 は、こんな構文でした。