【swift入門】初心者向け基本文法徹底解説「条件分岐if文」

ではでは、今回は条件で処理を分岐するif文をやっていきましょう!

ようやくプログラミングっぽくなっていきますよw

 

if文

まず、「条件で処理を分岐する」って

どういうことなのでしょうか?

簡単に見てみましょうw

 

例題をあげるとすると、

う〜ん、悩むなぁ〜w

「テストで100点取ったらお小遣い100円アップ」

こんなんでいっかw

上の例題だと、

条件が「テストで100点を取ったら」、

処理が「お小遣い100円アップ」!

 

こんな感じで条件を提示して、

その条件を満たしたら処理を実行する、

条件を満たさなかったら処理を実行しない。

これが「条件で処理を分岐する」方法です。

 

条件はYes、Noで答えられるものにしてください!

つまり、条件式はtrue、またはfalseになる論理式でなければなりません。

さきほどの例題をif文で書くと次のようになります。

if テストで100点を取った {

お小遣い100円アップ

}

 

式はこんな感じ

Swift
let testResult = 100
var okozukai = 500
if testResult == 100 {
    okozukai += 100
}

testResultがテストの結果ね!

okozukaiがお小遣い、現在500円もらっていることにしていますw

少なw

 

tesutResult == 100

この式は比較演算子の等号ね!

 

演算子が不安な方は、

こちらの記事を見直してきてね!

【swift入門】初心者向け基本文法徹底解説「演算子」

 

さておき、testResultと100が同じだったらtrue、

違ったらfalseね!

 

tesutResult == 100が、trueだったら、

{ }の中の式を実行します。

falseであれば、何もしません。

 

{ }の中の式は、

okozukai += 100

お小遣い500円に100円を足します。

 

if 〜 else文

では、テスト結果が100点じゃなかったときにも

なにかしらの処理を実行させたいとしましょう!

 

そんなときは、if 〜else文を使います。

if テストで100点を取った {

お小遣い100円アップ

} else {

なにかしらの処理

}

なにかしらの処理は、どうしよっか?w

1時間勉強時間を増やす?

 

とすると、こんな式が書けます!

Swift
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

 

では、これを式にしてみましょう!

Swift
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文で書くと次のようになります。

Swift
let testResult = 100
var okozukai = 500
if testResult == 100 {
    okozukai += 100
}

こんな感じでしたね!

 

これを三項演算子を使うと

Swift
let testResult = 100
var okozukai = 500
okozukai = testResult == 100 ? okozukai + 100 : okozaukai

こんな感じで書けます。

 

う〜ん、ちょっと分かりづらい例になってしまったw

でも、三項演算子を覚えてしまうと何かと便利なので

練習してみてください!

 

ネスティング

つぎはネスティングをやりましょう!

 

ちなみに、ネスティングとは

入れ子構造のことです!

 

いい例題を考えるのが難しいのですが、

どうしようw

 

自販機でいきましょうかw

では、自販機でジュースを買う行程はどんな感じでしょうか?

 

まず、お金を入れます。

投入金額が表示されます。

お目当てのジュースの在庫があって、

ジュースの値段以上のお金が投入されると

ボタンが光ります。

で、ジュースが買える準備が整うわけですね!

大雑把ですが、途中までの行程はこんな感じかなw

 

これを表すと、

お金を入れる

if ジュースの在庫がある {

if お金はジュース代金以上 {

自販機のジュースのボタンが点灯

} else {

自販機のジュースのボタンは変化なし

お金を追加

if お金はジュース代金以上 {

自販機のジュースのボタンが点灯

}

}

} else {

自販機のジュースのボタンは変化なし

品切れなので諦めるw

}

 

お金を入れる前に品切れかどうか確かめるか笑

 

では、つぎに式にしてみましょう!

必要な値は、

  1. お金(money)
  2. ジュース在庫(zaiko)*在庫は最低1つはあるものとします
  3. ジュースの値段(price)
  4. ジュースのボタン(button)
  5. お金の総額(amount)
Swift
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

【swift入門】初心者向け基本文法徹底解説「演算子」

 

で、さっきの自販機の例の式を論理演算子を使って書くと

Swift
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文をやりましょう!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA