【Swift入門 #13】もし〜なら - if文による条件分岐

プログラムの流れを制御する条件分岐について、if、else if、elseの使い方を初心者向けに解説します。

📚 Swift入門シリーズ: #11 セットSet#12 for-inループ


プログラムでは、条件によって処理を変えたい場面が頻繁にあります。この記事では、if文を使った条件分岐について学びましょう。

著者
著者: Sera
大学院でAI作曲に関して研究中!
来春からデータサイエンティストとして働く予定の技術オタク。
初心者
登場人物: あかり
流行りのAIやWeb技術に興味津々!
『知りたい』気持ちで質問を止められない、好奇心旺盛な学生。
normalの表情
初心者

前回はfor-inループで反復処理を学んだね!

専門家

そうだね。今回からは、プログラムの流れを制御する方法を学んでいくよ。第4章の始まりだね。

normalの表情
初心者

これまでで、データ型とコレクション、そしてループ処理を学んできたね。プログラムの基礎が身についた感じ!

専門家

よく頑張ったね。今回からは、プログラムの流れを制御する方法を学んでいくよ。

confusedの表情
初心者

これまでのプログラムって、上から順番に実行されるだけだよね。「もし〇〇なら△△する」みたいな処理はできないの?

専門家

それこそが今日学ぶ 条件分岐 なんだ。if文 を使えば、「もし条件が満たされたら、この処理を実行する」というプログラムが書けるんだよ。

excitedの表情
初心者

それは便利そう!

if文の基本

専門家

if文 の基本的な書き方はこうなるよ。

if 条件 {
    // 条件がtrueのときに実行される処理
}

条件がtrueの場合だけ、波括弧 {} の中の処理が実行されるんだ。

基本的なif文

専門家

実際の例を見てみよう。

let age = 20

if age >= 18 {
    print("成人です")
}
// 成人です

age >= 18 という条件がtrueだから、「成人です」と表示されるんだ。

もし条件がfalseなら、何も実行されないよ。

let age = 15

if age >= 18 {
    print("成人です")
}
// 何も表示されない
normalの表情
初心者

条件がfalseのときは、何も起きないんだね。

専門家

そうなんだ。でも、「条件がfalseのときの処理」も書きたいことがあるよね。そのときは else を使うんだ。

else:条件が偽の場合

専門家

else を使えば、条件がfalseのときの処理を書けるんだ。

if 条件 {
    // 条件がtrueのときの処理
} else {
    // 条件がfalseのときの処理
}

実際の例を見てみよう。

let age = 15

if age >= 18 {
    print("成人です")
} else {
    print("未成年です")
}
// 未成年です

age >= 18 がfalseだから、elseの中の処理が実行されるんだよ。

happyの表情
初心者

これで、どちらの場合でも何か処理ができるね!

else if:複数の条件

confusedの表情
初心者

3つ以上の選択肢がある場合はどうするの?例えば、「子供」「大人」「高齢者」みたいに分けたいとき。

専門家

そういう場合は else if を使うんだ。複数の条件を順番にチェックできるんだよ。

if 条件1 {
    // 条件1がtrueのときの処理
} else if 条件2 {
    // 条件1がfalseで、条件2がtrueのときの処理
} else {
    // どの条件もfalseのときの処理
}

実際の例を見てみよう。

let age = 25

if age < 18 {
    print("未成年です")
} else if age < 65 {
    print("成人です")
} else {
    print("高齢者です")
}
// 成人です

条件は上から順番にチェックされるんだ。最初に真になった条件のブロックだけが実行されて、それ以降の条件はチェックされないんだよ。

normalの表情
初心者

順番が大事なんだね。最初に当てはまったものが実行されるってことか。

専門家

その通り!だから、条件の順序はとても重要なんだ。

let score = 85

// 正しい順序
if score >= 90 {
    print("A")
} else if score >= 80 {
    print("B")
} else if score >= 70 {
    print("C")
} else {
    print("D")
}
// B

// 間違った順序
if score >= 70 {
    print("C")  // これが実行されてしまう
} else if score >= 80 {
    print("B")  // ここには到達しない
} else if score >= 90 {
    print("A")
}
// C

最初の例では正しく「B」と判定されるけど、2番目の例では「C」と判定されてしまうんだ。条件は上から順にチェックされるから、より厳しい条件を先に書く必要があるんだよ。

surprisedの表情
初心者

順番を間違えると、全然違う結果になっちゃうんだね!

複数の条件を組み合わせる

専門家

これまで学んだ論理演算子を使えば、複数の条件を組み合わせられるんだ。

AND演算子(&&)

専門家

AND演算子(&&) を使えば、「AかつB」という条件が書けるんだ。

let age = 25
let hasLicense = true

if age >= 18 && hasLicense {
    print("車を運転できます")
} else {
    print("車を運転できません")
}
// 車を運転できます

両方の条件がtrueの場合だけ、「車を運転できます」と表示されるんだよ。

OR演算子(||)

専門家

OR演算子(||) を使えば、「AまたはB」という条件が書けるんだ。

let isWeekend = false
let isHoliday = true

if isWeekend || isHoliday {
    print("休日です")
} else {
    print("平日です")
}
// 休日です

どちらか一方でもtrueなら、「休日です」と表示されるんだよ。

NOT演算子(!)

専門家

NOT演算子(!) を使えば、条件を反転できるんだ。

let isRaining = false

if !isRaining {
    print("傘は不要です")
}
// 傘は不要です

!isRaining は「雨が降っていない」という意味になるんだよ。

複雑な条件の組み合わせ

専門家

複数の論理演算子を組み合わせることもできるんだ。

let age = 25
let hasTicket = true
let hasMembership = false

if (age >= 18 && hasTicket) || hasMembership {
    print("入場できます")
} else {
    print("入場できません")
}
// 入場できます

「18歳以上でチケットを持っている」または「会員である」という条件なんだ。括弧を使って優先順位を明確にしているよ。

confusedの表情
初心者

括弧を使わないとどうなるの?

専門家

論理演算子には優先順位があって、!&&|| の順で評価されるんだ。でも、可読性のためにも、括弧を使って明示的に書く方が良いんだよ。

// 括弧なし(読みにくい)
if age >= 18 && hasTicket || hasMembership {
    print("入場できます")
}

// 括弧あり(読みやすい)
if (age >= 18 && hasTicket) || hasMembership {
    print("入場できます")
}

三項条件演算子

normalの表情
初心者

前に三項条件演算子っていうのがちょっと出てきたけど、あれって何だったっけ?

専門家

三項条件演算子 は、if-elseを短く書ける便利な構文なんだ。

条件 ? 真の場合の値 : 偽の場合の値

実際の例を見てみよう。

let age = 20
let status = age >= 18 ? "成人" : "未成年"
print(status)  // 成人

これは、次のif-elseと同じ意味なんだ。

let age = 20
var status: String

if age >= 18 {
    status = "成人"
} else {
    status = "未成年"
}
print(status)  // 成人

三項条件演算子の方が短く書けるよね。

happyの表情
初心者

確かに短い!でも読みにくくならない?

専門家

いい指摘だね。三項条件演算子は短く書けるけど、複雑な条件だと読みにくくなることがあるんだ。だから、シンプルな条件分岐のときだけ使う のがおすすめだよ。

// 良い例:シンプルな条件
let message = isLoggedIn ? "ようこそ" : "ログインしてください"

// 悪い例:複雑すぎる
let result = score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : "D"

悪い例のように、三項条件演算子をネストすると非常に読みにくくなるから、こういう場合は普通のif-elseを使うべきなんだ。

オプショナルバインディング

専門家

if文は、オプショナル型の値を安全に取り出すときにも使われるんだ。これを オプショナルバインディング って言うんだよ。

let numberString = "123"
let number = Int(numberString)

if let unwrappedNumber = number {
    print("数値は\(unwrappedNumber)です")
} else {
    print("数値に変換できませんでした")
}
// 数値は123です

if let 変数名 = オプショナル値 という構文で、値が存在する場合だけ処理を実行できるんだ。

confusedの表情
初心者

普通のif文と何が違うの?

専門家

オプショナルバインディングは、値の存在確認とアンラップ(取り出し)を同時に行えるんだ。

let numberString = "abc"
let number = Int(numberString)

// 普通のif文
if number != nil {
    print("数値は\(number!)です")  // 強制アンラップが必要
}

// オプショナルバインディング
if let unwrappedNumber = number {
    print("数値は\(unwrappedNumber)です")  // 安全に使える
} else {
    print("数値に変換できませんでした")  // こちらが実行される
}

オプショナルバインディングの方が安全で、! を使った強制アンラップを避けられるんだよ。オプショナル型については第6章で詳しく学ぶから、今は「こういう書き方がある」って覚えておいてもらえれば大丈夫だよ。

実践練習

専門家

じゃあ、練習問題をやってみよう。

問題1: 点数(score)を変数で定義して、90点以上なら「優」、80点以上なら「良」、70点以上なら「可」、それ以外は「不可」と表示するプログラムを書いてみて。

excitedの表情
初心者

やってみる!

let score = 85

if score >= 90 {
    print("優")
} else if score >= 80 {
    print("良")
} else if score >= 70 {
    print("可")
} else {
    print("不可")
}

できた!

専門家

完璧だね!条件の順序も正しいよ。

問題2: 年齢(age)とチケットの有無(hasTicket)を使って、「12歳未満は無料、チケットがあれば入場可、なければ入場不可」というロジックを書いてみて。

normalの表情
初心者

えーと...

let age = 10
let hasTicket = false

if age < 12 {
    print("無料で入場できます")
} else if hasTicket {
    print("入場できます")
} else {
    print("入場できません")
}

こう?

専門家

素晴らしい!完璧だよ。else ifで順番に条件をチェックしているね。if文の使い方をしっかり理解できているよ。

まとめ

この記事では、if文による条件分岐について学びました。

if文の基本:

  • if 条件 { 処理 }:条件がtrueのときだけ実行
  • else { 処理 }:条件がfalseのときに実行
  • else if 条件 { 処理 }:複数の条件を順番にチェック

論理演算子:

  • &&(AND):両方の条件がtrue
  • ||(OR):どちらかの条件がtrue
  • !(NOT):条件を反転

三項条件演算子:

  • 条件 ? 真の値 : 偽の値
  • シンプルな条件分岐を短く書ける
  • 複雑な場合は通常のif-elseを使う

オプショナルバインディング:

  • if let 変数 = オプショナル値
  • 値の存在確認とアンラップを同時に行う

重要なポイント:

  • 条件は上から順にチェックされる
  • 最初に真になった条件のブロックだけが実行される
  • 括弧で優先順位を明確にする

次回は「複数の選択肢」として、switch文について学びます。より強力なパターンマッチングの方法を身につけましょう!

← ブログ一覧に戻る