3
3

More than 3 years have passed since last update.

Rubyで早期リターンを使用してif文のネストから解放される方法(備忘録)

Last updated at Posted at 2021-02-17

はじめに

if文が何重にもネストされると頭がこんがらがる闇から解放されるべく
早期リターン(early return)という手法を使用する。

* 初学者のただの備忘録です。

環境

  • Ruby: 2.6.6
  • Rails: 6.0.3.5

簡単な例

コードにあまり意味はありません。

  def example(hoge)
    if hoge.nil? # hogeがnilならtrue、nilでなければfalseを返す
      true
    else
      false
    end
  end

これを早期リターンで書くと

  def example(hoge)
    return true if hoge.nil? # returnが必須
    false
  end

こう書けます。

実装

先ほどは簡単なif文でしたが少しだけややこしくなると

  def self.existing_ideas(category_name)
    if category_name.present?
      category = Category.find_by(name: category_name)
      if category.present? 
        category.ideas
      else
        []
      end
    else
      Idea.all
    end
  end

まずは内側から早期リターン

  .
  . 
  .
  if category.present? 
    category.ideas
  else
    []
  end
  # def self.existing_ideas(category_name)
  #   if category_name.present?
  #     category = Category.find_by(name: category_name)
        return category.ideas if category.present?
        []
  #   else
  #     Idea.all
  #   end
  # end

さらに早期リターンで完成
ifをunlessに変更して実装

  # def self.existing_ideas(category_name)
      return Idea.all unless category_name.present?
      category = Category.find_by(name: category_name)
      return category.ideas if category.present?
      []
  # end

ちなみに

私はunlessがあまり好きじゃないのでpresent?をblank?に変更して
ifのまま実装

  def self.existing_ideas(category_name)
    return Idea.all if category_name.blank?
    category = Category.find_by(name: category_name)
    return category.ideas if category.present?
    []
  end

以上。
間違い等があればご指摘頂けると嬉しいです。

3
3
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
3
3