ume

Guard Clauseとは?

結論

⇨条件分岐のネストを深くしないための技法のひとつ。 要は下記のように条件分岐がネストしているコードをネストしないようにする技法

if 条件式A
  if 条件式B
    条件式Bのtrue処理
  end 
else
   条件式Aのtrueの処理
end 

具体例

具体例数字の1~10までの数字が格納された配列から要素を1つずつ取り出し数字の5の時[5です]と表示し数字が偶数の時「偶数の配列」の中に入れる、奇数の時「奇数の配列」の中に入れるプログラムを作成してみる

Guard Clauseなし


numbers = (1..10).to_a
even = [] #偶数
odd = [] #奇数

numbers.each do |number|
  if number == 5 
    puts  "5です"
  else
    if number % 2 == 0
      even.push(number)
    else 
      odd.push(number)
    end
  end
end

5です
puts even #偶数表示[2,4,6,8,10]
puts odd #奇数表示[1,3,5,7,9]

if文がネストしていてわかりにくい

Guard Clauseあり

numbers = (1..10).to_a
even = [] #偶数
odd = [] #奇数


numbers.each do |number|
  puts  "5です" if number == 5 
    if number % 2 == 0
      even.push(number)
    else 
      odd.push(number)
    end
  end


puts even #偶数表示
puts odd #奇数表示

後置if文を使うことでifの条件分岐のネストがなくなり可読性が高いコードになりました。