Swiftにおけるguardの使い方。ifの逆っぽくて使いにくいと感じる方へ

公開日: : iOSアプリ開発

記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

UntitledImage

こんばんは、、@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アプリ開発をテーマとしたオンラインサロンを作りました。気になる方はぜひチェックして頂ければと思います。

この記事を書いた人
あきお(@akio0911
派手髪iOSエンジニア。Twitterアカウントは@akio0911。YouTubeチャンネル「あきおチャンネル」にてiOSアプリ開発講座を公開中。著書に「iPhoneアプリ開発レシピ」「cocos2d for iPhoneレッスンノート」など。iOSアプリ開発をテーマとしたオンラインサロン「アプリ道場サロン」を運営。東京・大阪にてアプリ開発講座「アプリクリエイター道場」を主催。

関連記事

この記事が気に入ったら「いいね!」しよう

Twitterで更新情報をゲット!

PAGE TOP ↑