35
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-07-19

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?
35
34
16

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
35
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?