はじめに
条件分岐のネストが深くなると可読性が落ちてしまいます。
しかし、returnを使って「早期復帰」させることで条件分岐をシンプルに書くことができます。
条件分岐でreturnを使う方法
まず、以下がreturnを使わずに書いたとき。ネストが深くてパッと見分かりにくいですよね。
room.present?じゃない時でもtrueを返すけど、SPECIAL_ROOM_NUMがある時だけはfalseを返すっていう処理です。
class Room
SPECIAL_ROOM_NUM = [104, 204, 304].freeze
def stayable?(room)
if room.present?
if SPECIAL_ROOM_NUM.include?(room)
false
else
true
end
else
true
end
end
end
returnを使って書いたのが以下。Rubyだと後置ifや後置unlessが使えるので一行で書くことができます。
present?の逆はblank?なので、room.blank?の時にtrueを返すよ、っていう処理にします。
さらにSPECIAL_ROOM_NUMを含んでいる時にはfalseを返すようにという書き方もできて、さらにDRYなコードにできますね。
class Room
SPECIAL_ROOM_NUM = [104, 204, 304].freeze
def stayable?(room)
return true if room.blank?
return false if SPECIAL_ROOM_NUM.include?(room)
true
end
end