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?