Swiftにおけるguardの使い方。ifの逆っぽくて使いにくいと感じる方へ
記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

こんばんは、、@akio0911です。
Swiftのguardってifの逆みたいで書いてて混乱してきたりしませんか?僕も最初はそうでした。しかしguardの捉え方を変えてみたら一気に使いやすくなりました。
まずはifで書いてみる
まずはguardを使わずにifで書いてみましょう。
struct Calculator {
func calculate(num1: Int, num2: Int) -> Int? {
if num1 == 0 {
return nil
} else {
if num2 == 0 {
return nil
} else {
return num1 + num2
}
}
}
}
「ifの条件をまとめればもっとスッキリ書けるぞ!」というツッコミはさておき、複数のifが連なっているのでインデントが深くなってしまっているのと、なんだか処理の意味を追いづらくなっている感じがあります。
次にguardで書いてみる
次にguardで書いてみます。
struct Calculator {
func calculate(num1: Int, num2: Int) -> Int? {
guard num1 != 0 else {
return nil
}
guard num2 != 0 else {
return nil
}
return num1 + num2
}
}
インデントが浅くなってパット見はスッキリしましたが、「やっぱりguardは分かりにくい・・・」と思った方もいらっしゃるかと思います。そう思った方はおそらくguardをこう読んでるのではないでしょうか?
struct Calculator {
func calculate(num1: Int, num2: Int) -> Int? {
guard num1 != 0 else {
// num1 != 0 じゃなかったら、
// つまり num1 == 0 だったら return nil する
return nil
}
guard num2 != 0 else {
// num1 != 0 じゃなかったら、
// つまり num1 == 0 だったら return nil する
return nil
}
return num1 + num2
}
}
「num1 != 0 じゃなかったら」というのが二重否定でとても分かりにくいですよね・・・。ここでちょっと捉え方を変えてみましょう。
guardの捉え方を変えてみる
struct Calculator {
func calculate(num1: Int, num2: Int) -> Int? {
guard num1 != 0 else {
return nil
}
// num1 != 0 だったら、return nil せずにここにくる
guard num2 != 0 else {
return nil
}
// num2 != 0 だったら、return nil せずにここにくる
return num1 + num2
}
}
これでかなり分かりやすくなったんじゃないかと思います。guardを書く時はguardの{}の中身に注目せず、guardの後の処理に注目して条件を書くと分かりやすくなります。
Guardは「returnしたい時の条件を書く」のではなく、「以降の処理を実行するために成り立っていて欲しい条件を書く」んですね。
参考になれば幸いです。
そういえば最近、iOSアプリ開発をテーマとしたオンラインサロンを作りました。気になる方はぜひチェックして頂ければと思います。
関連記事
この記事が気に入ったら「いいね!」しよう
Twitterで更新情報をゲット!



