ではでは、今回は条件で処理を分岐するif文をやっていきましょう!
ようやくプログラミングっぽくなっていきますよw
if文
まず、「条件で処理を分岐する」って
どういうことなのでしょうか?
簡単に見てみましょうw
例題をあげるとすると、
う〜ん、悩むなぁ〜w
「テストで100点取ったらお小遣い100円アップ」
こんなんでいっかw
上の例題だと、
条件が「テストで100点を取ったら」、
処理が「お小遣い100円アップ」!
こんな感じで条件を提示して、
その条件を満たしたら処理を実行する、
条件を満たさなかったら処理を実行しない。
これが「条件で処理を分岐する」方法です。
条件はYes、Noで答えられるものにしてください!
つまり、条件式はtrue、またはfalseになる論理式でなければなりません。
さきほどの例題をif文で書くと次のようになります。
if テストで100点を取った {
お小遣い100円アップ
}
式はこんな感じ
let testResult = 100
var okozukai = 500
if testResult == 100 {
okozukai += 100
}
testResultがテストの結果ね!
okozukaiがお小遣い、現在500円もらっていることにしていますw
少なw
tesutResult == 100
この式は比較演算子の等号ね!
演算子が不安な方は、
こちらの記事を見直してきてね!
さておき、testResultと100が同じだったらtrue、
違ったらfalseね!
tesutResult == 100が、trueだったら、
{ }の中の式を実行します。
falseであれば、何もしません。
{ }の中の式は、
okozukai += 100
お小遣い500円に100円を足します。
if 〜 else文
では、テスト結果が100点じゃなかったときにも
なにかしらの処理を実行させたいとしましょう!
そんなときは、if 〜else文を使います。
if テストで100点を取った {
お小遣い100円アップ
} else {
なにかしらの処理
}
なにかしらの処理は、どうしよっか?w
1時間勉強時間を増やす?
とすると、こんな式が書けます!
let testResult = 100
var okozukai = 500
var studyTime = 3
if testResult == 100 {
okozukai += 100
} else {
studyTime += 1
}
if文でやったように、
tesutResult == 100が、trueだったら、
{ }の中の式を実行しますが、
こんどは、falseであれば、
else以下の{ }の中の式を実行します。
studyTime += 1はOKですよね?!
studyTimeに1を足しています。
if 〜 else if 〜 else文
こんどは、複数の条件分岐がある式をやっていきましょう!
100点を取らないとお小遣いが上がらないなんて
ちょっと厳しい条件でしたよね!
これじゃ、勉強する気なんておこりませんww
そこで、もうちょっと条件をゆるくしたいと思います。
お小遣いアップの条件は80点以上だったらにしましょうか?!
80点以上ならお小遣いアップ!
で、追加条件として、
80点に満たなかったら1時間の勉強時間の追加
で、50点に満たなかったら2時間勉強時間を追加し、
猛勉強してもらいましょう!
これを表すと
if テストで80点以上を取った {
お小遣い100円アップ
} else if 50点以上80点未満 {
勉強時間を1時間追加
} else {
勉強時間を2時間追加
}
こんな感じかなw
では、これを式にしてみましょう!
let testResult = Int.random(in: 0 ... 100)
var okozukai = 500
var studyTime = 3
if testResult >= 80 {
okozukai += 100
} else if testResult >= 50 {
studyTime += 1
} else {
studyTime += 2
}
1行目のInt.random(in: 0 … 100)というのは、
0から100の乱数(ランダムな値)をつくっています。
テスト結果が常に100点ってわけではないですからねw
余談ですが、また後々やっていきますが、
ランダムな乱数を作りたい場合は、
このランダム関数を使います。
関数についても後でやりますね!
ここでは、こんなものがあるんだくらいでいいかなw
で、テスト結果が80点以上であれば、
お小遣いを100円アップしてif文処理を抜けていきます。
ですので、次の条件の実行処理の勉強時間に
1時間足されることはありません。
お小遣いアップしたのに勉強時間までアップなんて
そんなにお小遣いアップが嬉しかったのか?!
どんだけやる気みせるんだって感じですよねw
っていうのは冗談ですが、
if文で大切なのは、
条件式は、上から通っていって、
条件を満たす(trueになる)と処理を実行し、
if文を抜けるということです。
例題でいうと、テスト結果が90点としましょう!
最初の条件、testResult >= 80がtrueになり
okozukai += 100が実行されます。
で、それ以降の条件式は勝手にスルーされます。
ですので、else if 以降の
testResut >= 50の条件もtrueですが、
studyTime += 1の処理は実行されません。
OKですかね?
ですから
条件else if testResut >= 50の処理が実行されるのは、
自然と80点未満50点以上となるわけです。
で、テスト結果が50点未満の場合は、
条件、testResult >= 80がfalseとなり、
その下の条件、testResult >= 50もfalseとなり、
その下の条件、else(その他の意)の処理が実行されるわけです。
stduyTime += 2が実行されるんですね!
いや〜、1日5時間も勉強したくないなぁ〜w
三項演算子の復習
三項演算子は覚えていますかね?
if文をシンプルに書けるってやつです。
さっきのテスト結果が100点だったら
お小遣い100円アップ!
100点取れなければお小遣いはそのままってやつを
if文で書くと次のようになります。
let testResult = 100
var okozukai = 500
if testResult == 100 {
okozukai += 100
}
こんな感じでしたね!
これを三項演算子を使うと
let testResult = 100
var okozukai = 500
okozukai = testResult == 100 ? okozukai + 100 : okozaukai
こんな感じで書けます。
う〜ん、ちょっと分かりづらい例になってしまったw
でも、三項演算子を覚えてしまうと何かと便利なので
練習してみてください!
ネスティング
つぎはネスティングをやりましょう!
ちなみに、ネスティングとは
入れ子構造のことです!
いい例題を考えるのが難しいのですが、
どうしようw
自販機でいきましょうかw
では、自販機でジュースを買う行程はどんな感じでしょうか?
まず、お金を入れます。
投入金額が表示されます。
お目当てのジュースの在庫があって、
ジュースの値段以上のお金が投入されると
ボタンが光ります。
で、ジュースが買える準備が整うわけですね!
大雑把ですが、途中までの行程はこんな感じかなw
これを表すと、
お金を入れる
if ジュースの在庫がある {
if お金はジュース代金以上 {
自販機のジュースのボタンが点灯
} else {
自販機のジュースのボタンは変化なし
お金を追加
if お金はジュース代金以上 {
自販機のジュースのボタンが点灯
}
}
} else {
自販機のジュースのボタンは変化なし
品切れなので諦めるw
}
お金を入れる前に品切れかどうか確かめるか笑
では、つぎに式にしてみましょう!
必要な値は、
- お金(money)
- ジュース在庫(zaiko)*在庫は最低1つはあるものとします
- ジュースの値段(price)
- ジュースのボタン(button)
- お金の総額(amount)
var money = Int.random(in: 1 ... 100)
var zaiko = Int.random(in: 1 ... 10)
let price = 120
var button = false
var amount = money
if zaiko >= 1 {
if amount >= price {
button = true
} else {
money = Int.random(in: 1 ... 100)
amount += money
if amount >= price {
button = true
}
}
}
若干不具合があるけど、こんな感じかなw
というのは、この式だとお金の投入は2回しかやらないけど、
かならず、price以上になるとは限らないからねw
こういった場合は、
for-in文というのがあって、
条件を満たすまで処理を繰り返すことができます。
for-in文はまた後でやりますので、
ちょっと待っててねw
var amount = money
ここでは、amountで投入金額の合計値を表しています。
let zaiko = Int.random(in: 1 … 10)
とりあえず、ジュースの在庫はあるとします。
if amount >= price {
button = true
}
投入金額がジュースの値段を超えたら、
ボタンが使える(ジュースが買える)ようにします。
else {
money = Int.random(in: 1 … 100)
amount += money
if amount >= price {
button = true
}
}
投入金額がジュースの値段に満たなかったら
もう一度お金を投入します。
で、投入金額がジュースの値段を超えたら、
ボタンが使えるようにします。
この式の問題は、
必ずしも合計金額がジュースの値段を超えるとは限らないということですねw
まぁ、ここではif文の中にもif文が書けて
入れ子ができますよってことが言いたいので
このままで良しw!
で、今までの式を
if zaiko >= 1 {
}
ジュースの在庫があったらっていうif文の中に入れています。
論理式
で、if文の入れ子状態が多すぎると可読性が低くなってしまう
つまり、読みにくい!わかりにくい!ってことになってしまうので、
もっとシンプルに書くこともできます。
それが論理式を使う方法です。
論理式は、論理演算子を使った式のことですw
論理演算子はもう大丈夫ですよね!
あ〜、忘れちゃった〜って方は、
ふりだしに戻ってくださいw
で、さっきの自販機の例の式を論理演算子を使って書くと
var money = Int.random(in: 1 ... 100)
var zaiko = Int.random(in: 1 ... 10)
let price = 120
var button = false
var amount = money
if zaiko >= 1 && amount >= price {
button = true
} else {
money = Int.random(in: 1 ... 100)
amount += money
if amount >= price {
button = true
}
}
こんな感じ!
if zaiko >= 1 && amount >= price {
button = true
}
在庫があって、投入金額がジュース代より高くなったら
ボタンが光るよって式です。
&&の左の式(zaiko >= 1)と右の式(amount >= price)の両方がtrueなら
{ }の中の処理を実行しますよって感じです!
で、もっとシンプルに書くと
if zaiko >= 1, amount >= price {
button = true
}
カンマ(,)で書けちゃうんですねw
楽だ〜w
まぁ、こんな感じで書き方にはいくつかの方法があるけど、
わかりやすい、読みやすいコードを書くことを心がけてみてください!
てなことで、今日はここまでw
つぎは、値を使って処理を分岐させる
switch文をやりましょう!
コメントを残す