【步兵 經驗篇】代碼中的文件夾

【步兵 經驗篇】代碼中的文件夾 by EOS.

【新建文件夾】是使用電腦是最常見的操作,可以讓我們的方便管理自己的數據、文檔或者電影相片。
當我查找的時候就會分層次的進行篩選,在衆多的數據文件中,一層一層的找到我們想要的東西。
其實代碼也是一樣,當代碼量特別大的時候,光是找到或者定位到你想要的地方,也可能會變得異常艱難,
特別是好長一段時間不碰,然後出bug再回看代碼,那感覺簡直太棒了~

當兩件事情具有共同特點的時候,或許我們可以試試用同樣方法處理試試,正所謂“以此類推”=、=


先來個“根目錄”

當然還是用我最熟悉的遊戲來舉例,稍微複雜點遊戲中必然會有很多子系統,可能實現起來是相對獨立,
但是我們依然可以把這些功能模塊,放到一個“根目錄”下。

local sm = {} --SystemModels

function GameScene:init()
    sm.bag = ...
    sm.equip = ...
    sm.mail = ...
    sm.active = ...
    sm.rank = ...
    sm.skill = ...
    sm.team = ...
end

這樣做的好處是什麼呢,那就是一覽無餘,清晰可見,和我們的文件列表格式很相似。
當我們需要進行某些功能操作的時候,就可以“進入子文件夾”,比如:

sm.team.getKickOutByIndex(idx)

if sm.bag.getNumByResId(resId) > needNum then
    sm.skill.upgradeSkill(skId)
end

if  def.item.getLevel(equip) <= lv 
    and def.item.getProfession(equip) == profeesion 
    then

    sm.equip.wear(equip)
end

習慣這種方式後,肯能會進一步提高自己的歸納能力,讓你的代碼管理起來更方便。
或許有一天你想看看自己做了多少個功能模塊,那麼直接一個pairs print(key)就可以了。
又或許某天來了個新同事,問你這個什麼什麼功能,寫在什麼地方,你可以很快的告訴他。
你很快的張口說出”xx.xx.xx.xx就在這個位置”,連想都不用想,代碼都不用看一眼。
代碼管理也是編程的一部分,讓代碼更舒服,自己寫着也輕鬆些,何樂而不爲呢。


其他的“文件夾”

其實能用到這種模式的地方有很多,這其實就和枚舉一樣,當你把一些東西,羅列歸併到一起的時候,
他就已經出現了,只不過刻意一些,可能會更整潔。比如:

scene.layer.getTopLayer()
scene.player.hideOtherPlayers()
scene.monster.killAll()
scene.tx.clear()

player.pt.hp = 0
player.buff.add(buffList)
player.show.ChangeFashion(fashion)

layer.ui.btn_OK      --簡單的
layer.ui.label.coins --複雜的

def.layer.addMask()
def.layer.actions.FadeInOut = {
    ["onEnter"] = function...
    ["onExit"] = function...
}

只是列舉了一些,常用的,有沒有一些感觸呢=、=
上邊一些代碼涉及到組件模式。不出意外下週會單獨補一篇組件模式的。


不妨試試

做界面的時候,一般會先解析控件,不妨試試下邊的方法:

local TestLayer = {}
function TestLayer:init()
    --...
    self.ui = {--先把空間用字符+分隔符的格式表示出來
        btn_back = "topPanel/btn_back",
        btn_go = "bottomPanel/btn_go",
        label = {
            title = "...",
            desc = "...",
            leftNum = "...",
            expendNum = "...",
            levelLimit = "...",
        }
    }
    --然後直接轉換爲可用的控件,覆蓋掉原有字符串
    csb.initUIConvert(csb, self.ui)
end

是不是感覺把這些東西都整合到一起看起來特別舒服呢,至於轉換函數,也沒什麼難點,
一個遞歸+一個for循環再覆蓋掉[k]對應的值就可以了。


總結

雖然不能說這種方式最好,畢竟萬事皆有利弊,比如有的人就是喜歡把所有東西全都丟到桌面上
(ps:我好像得了一種怪病,叫做“暈美術的桌面”),但應該也不差。~
主要還是思維方式的轉變,代碼的一個個功能模塊當作一個個文件,然後就行歸類劃分,
我認爲還是可行的,用起來也很舒服,喜歡可以試試,說不定格外的適合你~

See Again~
之前
真愛無價,歡迎打賞~
讚賞碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章