Menu
Coddy logo textTech

guard let

CoddyのSwiftジャーニー「基礎」セクションの一部 — レッスン 13/86。

if let はオプショナルをアンラップし、値が存在する場合にコードを実行しますが、guard let は逆のアプローチを取ります。つまり、値が欠けている場合に早期に終了(エグジット)します。これは、まず「良くない」ケースを処理し、メインのロジックをクリーンに保ちたい関数の中で特に便利です。

func greet(name: String?) {
    guard let unwrappedName = name else {
        print("No name provided")
        return
    }
    print("Hello, \(unwrappedName)!")
}

greet(name: "Taylor") // こんにちは、Taylor!
greet(name: nil)      // 名前が指定されていません

guard let文は、nameに値があるかどうかをチェックします。値がない場合、elseブロックが実行され、関数はreturnで終了します。オプショナルに値が含まれている場合、その値はunwrappedNameにアンラップされます。そして、ここがif letとの大きな違いです。アンラップされた変数は、ブロック内だけでなく、関数の残りの部分でも引き続き使用可能です。

この「早期リターン(early exit)」パターンは、エラーケースを事前に処理することでコードの可読性を保ち、メインのロジックが複数の if 文の中にネストされないようにします。

challenge icon

チャレンジ

簡単

オプショナルの age パラメータを受け取り、guard let を使用して安全にアンラップする関数 validateAge を作成してください。

もし年齢が nil の場合は、"Invalid age" を返してください。それ以外の場合は、"Age: [value]" を返します。ここで [value] はアンラップされた年齢です。

引数:

  • age (Int?): 人の年齢を表すオプショナルの整数

戻り値: 文字列 — 入力が nil の場合は "Invalid age"、アンラップされた値がある場合は "Age: [value]"

例: age25 の場合は "Age: 25" を返します。agenil の場合は "Invalid age" を返します。

チートシート

guard let を使用してオプショナルをアンラップし、値がない場合に早期退出します:

func greet(name: String?) {
    guard let unwrappedName = name else {
        print("No name provided")
        return
    }
    print("Hello, \(unwrappedName)!")
}

guard let 文は、オプショナルに値があるかどうかをチェックします。値がない場合は、else ブロックが実行され、return によって関数を終了します。オプショナルに値が含まれている場合は、アンラップされ、関数の残りのスコープで利用可能な状態になります。

この「早期退出」パターンは、エラーケースを最初に処理することで、メインのロジックをクリーンでインデントのない状態に保ちます。

自分で試してみよう

func validateAge(age: Int) -> String {
    // ここにコードを書いてください
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン