1
0

ガード節について

Posted at

はじめに

現在、railsを使う現場で働いてますが、コードレビューでうけた指摘を定着し、記憶に残すために投稿します!

【結論】ガード節を使った書き方

要件
ある特定のユーザー名param[:name]が渡される。

  • usersテーブルに情報がある場合
    さらにpurchasesテーブルを検索し、当該ユーザーの購入記録を取得する。
  • usersテーブルに情報がない場合
    処理を終了する。

ガード節を使わない書き方

def index
    if param[:name].present?
        @user = User.find_by(user_name: param[:name])
        if @user.present?
            @purchases = Purchase.find_by(user_id: @user.id)
            if @purchases.present?
                # 購入記録がある場合の処理
            else
                # 購入記録がない場合の処理
            end
        else
            return
        end
    end
end

ガード節を使う書き方
※ 学習のため、あえてifunlessどちらも使っています。

def index
    return if param[:name].blank?

    @user = User.find_by(user_name: param[:name])
    return unless @user.present?

    @purchases = Purchase.find_by(user_id: @user.id)
    if @purchases.present?
        # 購入記録がある場合の処理
    else
        # 購入記録がない場合の処理
    end
end

メリット

上記の例でいうと、メインの処理となるのはユーザーの購入データの取得と結果に応じた処理の部分。
エラーなどを防ぐためにパラメータやデータの存在の有無を確認する処理をはさむことは多いがこれらはメインの処理でないし、データが存在しない場合は先の処理を行わない仕様となるはずである。

ガード節を用いて早期リターンを行うことで

  • 不要な処理を行うことがなくなる。しかもそれが視覚的に伝わる。
  • ifの重ねがけによるネストが軽減される。

参考

https://zenn.dev/adverdest/articles/16a698200fd872
https://zenn.dev/kingdom0927/articles/2b9d8ec1becf8b

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0