Edited at

swiftのguardを使ってみる

More than 1 year has passed since last update.


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を使用した方が読みやすくなりますね。