跳到主要內容

發表文章

目前顯示的是 四月, 2016的文章

【程設風格】早期終止執行

剛開始寫程式的時候,以為所謂邏輯判斷就是很多個若 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 。

如果要用譬喻法形容,其實就跟人生一樣,別花太多力氣在不重要的事情上面,及早說…