Essentail Rails Design Pattern

Write Good Rails Code

條件式的誤用

討論完了命名,接下來是「邏輯條件式的誤用」。條件的誤用還要比錯誤的命名還要花時間,因為錯誤的命名只是「障礙物」,搬開即可。而條件的誤用卻是「崎嶇彎延的山路」,大幅拖慢你進行開發的時間,你卻很難抄什麼捷徑。

命名錯誤只要批次訂正個名字,「尋找 / 取代」大法就可以解決。可是錯誤的邏輯,可能要倒進大腦轉個幾遍,才能明白到底出什麼問題。

常見的邏輯條件式的誤用大概有兩大類型:

濫用 elsif

雖然 Ruby 提供了 elsif 去處理 if / else 外其他的情形。

但在專案中,elsif 很常被邏輯不是那麼好的開發者濫用。一般來說,只要看到 elsif 出現,就要開始當心程式碼已開會不會開始出現 bad smell。而若看到一段程式碼內中出現了三個以上的 elsif,十成十的機率這一段 code 需要被重寫。

邏輯混亂

1
2
3
4
5
6
7
8
9
if color == "red"
  print "red"
elsif color == "green"
  print "green"
elsif orignal_color == "yellow"
  print "yellow"
else
  print "orange"
end

通常我們會尋找獨立邏輯,以將之獨立抽開的模式進行重構。

容易理解

把不一致的條件抽出成單獨的 statment,其餘部分使用 case when 改寫。

1
2
3
4
5
6
7
8
9
10
11
12
13
if original_color == "yellow"
  print "yellow"
  return
end

case color
when "red"
  print "red"
when "green"
  print "green"
else
  print "orange"
end

類似的 method,變數與寫法不一致

#TODO

Exercises

#TODO

Comments