guardとは
guardは条件に一致なかった場合に、処理を中断させるための構文です。
条件に一致ってifと一緒じゃんと最初は思いがちですが、
ifの場合は条件に一致したら何かしらの処理を行うことに対して、
guardの場合は処理を中断させるということがポイントになります。
つまり、条件に一致せず処理を中断させる場合は、if文で処理を中断させるのではなくて、guardで処理を中断させましょうということです。
func guardTest(status: Int) {
guard status == 0 else { return } // 引数が0でなかったらreturn
print("guardしません")
}
ifでも書けるのにguardを使うメリットは?
これからguardを覚える場合には、ifでできることをわざわざ覚える必要あるのかよと思いがちですが、それでもguardを使う理由は、可読性が上がることだと思います。
guardが出てきた時点で、処理から抜けるんだなということがわかるので、慣れてくると読みやすいです。
func guardTest(num: Int) {
guard num == 5 else { print("guardしました") }
// 'guard' body may not fall through, consider using 'return' or 'break' to exit the scope
print("guardしてないよ")
}
このようにif文と同じように条件に一致したら処理を行わせようとすると、エラーが発生します。
returnかbreakを使ってスコープから抜けてくださいねと言ったようなことを言われちゃいます。
if文と同じような処理を行うことができないので、guardが出てきたら処理を途中で抜けるんだなーということがわかると思います。
アンラップするときにも使える
func guardTest(num: Int?) {
guard let unwrappedNum = num else { return }
print(num) // Optional(5)
print(unwrappedNum) // 5
}
guardTest(num: 5)
if文と同じようにnilチェックを行えます。
こちらもnilだったら処理を中断させたいので、処理を中断させる構文であるguardを使用した方が読みやすくなりますね。