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