【步兵 經驗篇】代碼中的文件夾 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~
之前
真愛無價,歡迎打賞~