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との重要な違いです。アンラップされた変数はブロック内だけでなく、関数の残りの部分でも利用できます。
この「早期終了」パターンは、エラーケースをあらかじめ処理することでコードの可読性を保ち、メインロジックが複数の if 文の中にネストされるのを防ぎます。
チャレンジ
簡単オプションの age パラメータを受け取り、guard let を使用して安全にアンラップする関数 validateAge を記述してください。
年齢が nil の場合は、"Invalid age" を返してください。それ以外の場合は、アンラップされた年齢が [value] となる "Age: [value]" を返してください。
パラメータ:
age(Int?): 人の年齢を表すオプションの整数
戻り値: 文字列。入力が nil の場合は "Invalid age"、それ以外の場合はアンラップされた値を含む "Age: [value]"。
例: age が 25 の場合は、"Age: 25" を返します。age が nil の場合は、"Invalid age" を返します。
自分で試してみよう
func validateAge(age: Int) -> String {
// ここにコードを書いてください
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Swiftプレイグラウンド