Ruby

ifで判断したい条件が多い場合はどうする?

More than 1 year has passed since last update.

if文でAND判断したい条件が複数ある場合、普通は・・・

if 条件1 && 条件2 && 条件3

とか、

if 条件1
  if 条件2
    if 条件3

とかしますよね。

しかし、もしも判断させたい条件が10個以上とかある場合は、どうするのが良いのでしょうか。

とりあえず、次のような方法を使ってみました(2016/07/25- @yancyaさんのコメントを元に修正)。

def filter(judges)
  yield if judges.all?
end

# 条件1~5はifで判断する文
judges = []
judges << 条件1
judges << 条件2
judges << 条件3
judges << 条件4
judges << 条件5

# 全ての条件に通過した場合のみ、ブロック内の式が実行
filter(judges) do
  puts 'pass'
end

具体的には以下のような感じで使います。

n = 15

judges = []
judges << (n > 10)
judges << (n < 20)
judges << (n % 2 != 0)
judges << (n != 5)
judges << (n.to_s.size < 3)

filter(judges) do
  puts "#{n} is correct"
end

何かアホなことをしている気がする・・・
ベストプラクティス的な方法があったら教えてください。

追記

@k-shogoさんが提示して下さった方法(+@asmさんの助言)が一番スマートかもしれません。コメントして下さった方々、本当にありがとうございます。勉強になりました。

n = 15

judges = [true]
judges << (n > 10)
judges << (n < 20)
judges << (n % 2 != 0)
judges << (n != 5)
judges << (n.to_s.size < 3)

puts "#{n} is correct" if judges.all?