iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
Software Development

程式淨化計畫:痛苦是重構的起源!系列 第 5

Replace Nested Conditional with Guard Clauses 的重構

  • 分享至 

  • xImage
  •  

Replace Nested Conditional with Guard Clauses

簡介

假如你有一組巢狀式條件, 且很難去了解正常的程式碼執行流程.
此時使用Guard Clauses來重構

重構前範例

假設有個腳踏車特技選手, 根據他的表演內容而獲得不同分數.
再假設選手有四種表現狀況: 摔車、後空翻、側身翻與正常表演.

public class BicyclePlayer
{
    public double GetScore()
    {
        double result;
        
        if (isFellOff)
        {
            result = FellOffScore();
        }
        else
        {
            if(isBackflipDone)
            {
                result = BackflipScore();
            }
            else
            {
                if (isSideSpinDone)
                {
                    result = SideSpinScore();
                }
                else
                {
                    result = NormalScore();
                }
            }
        }

        return result;
    }
}

重構後範例

發現到, 這幾個巢狀條件式不太好理解, 因此我們將這些特技表演的條件式做"攤平"

public class BicyclePlayer
{
    public double GetScore()
    {
        if (isFellOff)
        {
            return FellOffScore();
        }

        if (isBackflipDone)
        {
            return BackflipScore();
        }

        if (isSideSpinDone)
        {
            return SideSpinScore();
        }

        return NormalScore();
    }
}

經過這種重構, 可以很快了解每一個條件的優先順序.

為何要重構

有開發經驗的人會發現, 當巢狀式條件式越來越多的時候, 將會形成一種"波動拳縮排"
如下圖:
https://ithelp.ithome.com.tw/upload/images/20240919/2012865124XgAgMTHt.png
(圖片來源: https://medium.com/@brooknovak/why-you-should-reduce-nesting-blocks-in-your-code-with-practical-refactoring-tips-11c122735559)

這種程式碼到底該如何維護...?無法想像維護要花多少精力.


上一篇
Feature envy 的重構
下一篇
Breaking Yo-Yo Hierarchies 的重構
系列文
程式淨化計畫:痛苦是重構的起源!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言