はじめに
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
以上。
間違い等があればご指摘頂けると嬉しいです。