Ravi Wu
程設風格 | 早期終止執行
剛開始寫程式的時候,以為所謂邏輯判斷就是很多個若 A 則 B 包起來的複雜地圖。這樣的程式碼,很容易因為邏輯判斷太過複雜,很難一眼就看到到底目前程式會跑到哪一個 if 分支裡面執行。
taget = Dog.new
if target.is_a?(Animal)
if target.has_four_legs?
if target.is_a?(Dog)
puts "wolf!"
else
puts "four leg animal can say yeah"
end
else
puts "don't know what that is"
end
else
puts "don't know what that is"
end
=> "wolf!"
如果透過層層過濾只是要剔除一些情況讓程式不處理,例如有很多個分支其實是「不處理」或是「同樣的簡單處理」,例如上面的 puts "don't know what that is"
,可以改用「早期終止」的模式來改寫。
def what_it_says(target)
# 如果不符合條件的參數就會在此提早回傳值
return "don't know what that is" unless target.is_a?(Animal) && target.has_four_legs?
# 符合資格的參數才會進入真正的必要判斷
if target.is_a?(Dog)
"wolf!"
else
"four leg animal can say yeah"
end
end
taget = Dog.new
puts what_it_says(taget)
=> "wolf!"
這個模式可以有效減少邏輯套邏輯的複雜架構,程式碼比較好看出來究竟是要執行什麼事情,也比較好 debug 。
如果要用譬喻法形容,其實就跟人生一樣,別花太多力氣在不重要的事情上面,及早說不。