3.4 Guard
Guard
if
ゲートとは逆に、条件はfalse
時運転のコードguard condition else {
// false: execute some code
}
// true: execute some code
else
通過if
まず条件に合わない状態をフィルタリングし、設計関数に下端をコアコードにするのに役立ちます.func divide(_ number: Double, by divisor: Double) {
// 나누는 수가 0인 경우를 먼저 걸러낸다.
guard divisor != 0.0 else {
return
}
// 핵심 로직
let result = number / divisor
print(result)
}
guard vs if
guard
ドアで似たようなデザインができます.func divide(_ number: Double, by divisor: Double) {
if divisor == 0.0 { return }
let result = number / divisor
print(result)
}
if
// 나누는 수가 0이 되면 안된다는 것을 명확하게 보여줌
guard divisor != 0.0 else { return }
関数の条件を理解し、内部コードを一目で見ると便利です. func singHappyBirthday() {
guard birthdayIsToday else {
print(”No one has a birthday today.”)
return
}
guard !invitedGuests.isEmpty else {
print(”It’s just a family party.”)
return
}
guard cakeCandlesLit else {
print(”The cake’s candles haven’t been lit.”)
return
}
print(”Happy Birthday to you!”)
}
pyramid of doom
if
ドア内部if
ドアが繰り返すコードfunc singHappyBirthday() {
if birthdayIsToday {
if !invitedGuests.isEmpty {
if cakeCandlesLit {
print(”Happy Birthday to you!”)
} else {
print(”The cake’s candles haven’t been lit.”)
}
} else {
print(”It’s just a family party.”)
}
} else {
print(”No one has a birthday today.”)
}
}
Guard with Optionals (guard let)
if-let
と同様に、オプションから値を抽出できます.抽出値が
nil
の場合、else
ゲートを実行します.if-let
と異なり、外部から接近し続けることが可能// if-let
if let eggs = goose.eggs {
print(”The goose laid \(eggs.count) eggs.”)
}
// 이곳에선 `eggs`에 접근할 수 없음
// guard let
guard let eggs = goose.eggs else { return }
// `eggs`에 접근 가능
print(”The goose laid \(eggs.count) eggs.”)
if let
と同様に、複数のオプション値を一度に抽出することができる.// if let
func processBook(title: String?, price: Double?, pages: Int?) {
if let theTitle = title,
let thePrice = price,
let thePages = pages {
print(”\(theTitle) costs $\(thePrice) and has \(thePages)
pages.”)
}
}
// guard let
func processBook(title: String?, price: Double?, pages: Int?) {
guard let theTitle = title,
let thePrice = price,
let thePages = pages else {
return
}
print(”\(theTitle) costs $\(thePrice) and has \(thePages) pages.”)
}
Reference
この問題について(3.4 Guard), 我々は、より多くの情報をここで見つけました https://velog.io/@j00hyun/3.4-Guardテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol