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 文の中にネストされないようにします。
チャレンジ
簡単オプショナルの age パラメータを受け取り、guard let を使用して安全にアンラップする関数 validateAge を作成してください。
もし年齢が nil の場合は、"Invalid age" を返してください。それ以外の場合は、"Age: [value]" を返します。ここで [value] はアンラップされた年齢です。
引数:
age(Int?): 人の年齢を表すオプショナルの整数
戻り値: 文字列 — 入力が nil の場合は "Invalid age"、アンラップされた値がある場合は "Age: [value]"。
例: age が 25 の場合は "Age: 25" を返します。age が nil の場合は "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 {
// ここにコードを書いてください
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。