月ノ書

<Swift>条件分岐

今回の記事でわかること
  • if 文を使った条件分岐ができる
  • switch 文を使った複数条件分岐ができる
  • guard 文を使った早期リターンを知る

if 文

もっとも基本的な条件分岐。「もし~なら処理する」という書き方ができます

let score = 75

if score >= 80 {
    print("とてもよくできました!")
} else if score >= 60 {
    print("合格です")
} else {
    print("不合格です")
}

/* 出力結果
合格です
*/

if → else if → else の順位条件をチェックし、最初に当てはまったブロックを実行します

ネストした if 文

条件をさらに細かく分けたい場合は入れ子にできます

let age = 20
let hasID = true

if age >= 18 {
    if hasID {
        print("入場できます")
    } else {
        print("身分証を持ってきてください")
    }
} else {
    print("18歳未満は入場できません")
}

/* 出力結果
入場できます
*/

switch 文

Swift の switch はとても強力で、C言語や C++ とは違って break を書かなくても自動で分岐が終了されるうえ、整数だけでなく文字列や範囲、パターンマッチにも対応しています

let grade = "B"

switch grade {
case "A":
    print("素晴らしい!")
case "B":
    print("よくできました")
case "C":
    print("合格です")
default:
    print("再試験です")
}

/* 出力結果
よくできました
*/

範囲を使った switch 文

let score = 72

switch score {
case 90...100:
    print("Sランク")
case 80..<90:
    print("Aランク")
case 60..<80:
    print("Bランク")
default:
    print("Cランク")
}

/* 出力結果
Bランク
*/

Swift の switch 値のパターンだけでなく、範囲や where 条件も書ける上、Enum と組み合わせると型安全に条件分岐ができるため、現場では使うことが多いです

enum Result {
    case success(data: String)
    case failure(error: String)
}

let result: Result = .success(data: "OK")

switch result {
case .success(let data):
    print("成功: \(data)")
case .failure(let error):
    print("失敗: \(error)")
}

/* 出力結果
成功: OK
*/

上記は switch + enum で設計されたコードで、エラーハンドリングに使ったりします。

論理演算氏との組み合わせ

条件は &&(AND)、||(OR)、!(NOT)で組み合わせ可能です

let age = 19
let hasTicket = false

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

/* 出力結果
入場できません
*/

guard 文(早期リターン)

Swift 独自の便利な書き方が guard。条件を満たさない場合に早く処理を抜けるときに使います

func enter(age: Int?, ticket: Bool) {
    guard let age = age, age >= 18 else {
        print("18歳未満、または年齢不明のため入場できません")
        return
    }
    guard ticket else {
        print("チケットを持っていないので入場できません")
        return
    }
    print("入場できます!")
}

enter(age: 20, ticket: true)
enter(age: 16, ticket: true)
enter(age: nil, ticket: true)

/* 出力結果
入場できます!
18歳未満、または年齢不明のため入場できません
18歳未満、または年齢不明のため入場できません
*/

guard は「条件を満たさなければ即 return」で、ネストが深くならず読みやすいコードになります

0
Would love your thoughts, please comment.x