重构:卫语句取代嵌套条件表达式

之前代码一直写的很烂,在大佬的进一下,深度看了《重构》一书,发现自己代码中许多屎一般的逻辑都中招了。所以贴出来最具有特点的代码重构示例,来供大家一起学习,在未来写出更风骚飘逸的代码

代码修改前:

---优化前
function FeedFishBtnComponent:FeedFishBtn()
    local fishCount = self:GetEatFeedFishCount()
    if fishCount > 0 then
        local isCd = dataMgr.feedFishData:IsFeedFishTimeItOnCD()
        if isCd then
            local hasNet = Util.CheckInternetReachable(true)
            if hasNet then
                local isAdReady = sdkMgr.ads:IsAdReady()
                if isAdReady then
                    self.adStartTime = os.time()
                    eventMgr:Fire(EventNames.UI_FEED_FISH_ANI_STOP, false)
                    local isShowAd = dataMgr.adRewardData:ShowAd(EAdRewardType.AdFeed,
                            function(adUnitId, adInfo)
                                eventMgr:Fire(EventNames.UI_FEED_FISH_ANI_STOP, true)
                                self:FeedFish(true)
                                self:ReckonByTimeDifference()
                                self:RefreshFeedFishShow()
                                eventMgr:Fire(EventNames.MAIN_STATIC_INSERT_SCREEN_AD, true)
                            end,
                            function()
                                eventMgr:Fire(EventNames.UI_FEED_FISH_ANI_STOP, true)
                                self:RefreshFeedFishShow()
                                eventMgr:Fire(EventNames.MAIN_STATIC_INSERT_SCREEN_AD, true)
                            end)
                    if not isShowAd then
                        eventMgr:Fire(EventNames.MAIN_STATIC_INSERT_SCREEN_AD, true)
                    end
                else
                    uiMgr:OpenWindow(UIWindowNames.UIToastTip, LangUtil.GetValue(10020))
                    eventMgr:Fire(EventNames.MAIN_STATIC_INSERT_SCREEN_AD, true)
                end
            else
                eventMgr:Fire(EventNames.MAIN_STATIC_INSERT_SCREEN_AD, true)
            end
        else
            dataMgr.feedFishData:SetStartFeedingFish(os.time())
            self:RefreshFeedFishShow()
            self:FeedFish(false)
            coroutine.waitforseconds(2.5)
            self.adTips:SetActive(true)
            coroutine.waitforseconds(1.5)
            self.adTips:SetActive(false)
            eventMgr:Fire(EventNames.MAIN_STATIC_INSERT_SCREEN_AD, true)
        end
    else
        uiMgr:OpenWindow(UIWindowNames.UIToastTip, LangUtil.GetValue(10087))
        self.eatingRange:SetActive(false)
        eventMgr:Fire(EventNames.MAIN_STATIC_INSERT_SCREEN_AD, true)
    end
    UIFreezeHelper.UnFreeze(FreezeKey.FeedFishOnClick)
end

代码修改后:

---优化后
function FeedFishBtnComponent:FeedFishBtn()
    local fishCount = self:GetEatFeedFishCount()
    if fishCount <= 0 then
        uiMgr:OpenWindow(UIWindowNames.UIToastTip, LangUtil.GetValue(10087))
        return
    end

    local isCd = dataMgr.feedFishData:IsFeedFishTimeItOnCD()
    if not isCd then
        dataMgr.feedFishData:SetStartFeedingFish(os.time())
        self:RefreshFeedFishShow()
        self:FeedFish(false)
        coroutine.waitforseconds(2.5)
        self.adTips:SetActive(true)
        coroutine.waitforseconds(1.5)
        self.adTips:SetActive(false)
        return
    end

    local hasNet = Util.CheckInternetReachable(true)
    if not hasNet then
        return
    end

    local isAdReady = sdkMgr.ads:IsAdReady()
    if not isAdReady then
        uiMgr:OpenWindow(UIWindowNames.UIToastTip, LangUtil.GetValue(10020))
        return
    end

    self.adStartTime = os.time()
    eventMgr:Fire(EventNames.UI_FEED_FISH_ANI_STOP, false)
    local isShowAd = dataMgr.adRewardData:ShowAd(EAdRewardType.AdFeed,
            function(adUnitId, adInfo)
                eventMgr:Fire(EventNames.UI_FEED_FISH_ANI_STOP, true)
                self:FeedFish(true)
                self:ReckonByTimeDifference()
                self:RefreshFeedFishShow()
            end,
            function()
                eventMgr:Fire(EventNames.UI_FEED_FISH_ANI_STOP, true)
                self:RefreshFeedFishShow()
            end)
    if not isShowAd then
        uiMgr:OpenWindow(UIWindowNames.UIToastTip, LangUtil.GetValue(10020))
        return
    end
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值