web-dev-qa-db-ja.com

Ruby-IFブロックを終了します

IFブロックでは、何らかの条件が真であるかどうかを確認する必要があり、真である場合はブロックを終了します。

#something like this
if 1 == 1
  return if some_object && some_object.property
  puts 'hello'
end

どうすればいいですか?

14

そのようなifから抜け出すことはできません。あなたができることはそれに副節を追加することです:

if (cond1)
  unless (cond2)
    # ...
  end
end

ロジックがネストされすぎて問題が発生し、それをより適切にフラット化する方法が必要な場合は、事前に変数を計算してから、必要な場合にのみ飛び込むことをお勧めします。

will_do_stuff = cond1
will_do_stuff &&= !(some_object && some_object.property)

if (will_do_stuff)
  # ...
end

breakすることなく、深くネストされた構造を持つことを回避する方法はいくつかあります。

15
tadman

物事に関連する単語の選択には注意してください。 Rubyにはブロックがあるため、条件文がブロックであるという印象を受けているかどうかはわかりません。たとえば、次のことはできません。

# will NOT work:
block = Proc.new { puts "Hello, world." }
if true then block

ネストされた条件が必要な場合は、複雑にすることなくそれを行うことができます。

if condition_one?
  if condition_two?
    # do some stuff
  end
else
  # do something else
end
2
coreyward