写代码必看!!!!

来源:互联网 发布:逆战猎场天赋具体数据 编辑:程序博客网 时间:2024/05/21 22:35

专业程序员的7个素质: 承担责任,高质量代码,代码上的时间,对自己领域的精通,思维模式,沟通,合作。

1 . 写逻辑代码写完后一定要对着自己的逻辑全部走通一遍。不要写完立即开始运行调试。这样的调试会浪费大量的时间。因为有些错误仅仅是因为你代码写错,笔误,或者逻辑的一个漏洞而导致。而这些问题都是非常简单的。所以我们在写完逻辑的时候一定要对着代码理一遍思路,看看有没有一些弱智错误,再三确认无误再去运行调试,调试成功之后看现象是否正确,如果现象已经正确,那么你要根据你的流程看输出日志是否完全符合你的逻辑!

2 更改代码逻辑的时候,记住一定要去增加代码,而不要去删除或者更改代码。增加代码是最好的方式。
3 在更改一些代码的情况,比如修改了一个变量的名字或者逻辑。一定要多思考这个地方更改的这个变量有没有在其他的地方使用到过。逻辑的修改会不会影响其他代码的调用!!! 有的时候不小心改了一个地方,但是没有去思考,其他原本正确的逻辑也错了,会给自己带来相当大的困扰!! 也需要不断的打印日志去查找。 其实就是一个非常弱智的错误!!!

4.在调用别人的接口获取数据的时候一定要给自己留一手!特别是在自己写一个独立的功能需要用到一些其他模块的数据! 取到数据一定要判断一下有没有! 最好直接断言。 防止你自己模块出问题其实是别人那的数据问题!!

5 自己的接口函数尽量要想办法不去依赖全局变量或者其他获取数据的接口! 要什么数据全部以参数的方式传进来!! 参数的方式传进来。 自己传参数可以保证数据是正确的。另一种情况,这个接口要移植就会非常的方便,只需要自己用不同的方式创建参数数据。

6 在一些问题使用当前的方法无法解决的时候,一定有新的方法可以验证你的错与对。你可以输出几种情况进行比较。

  1. 做项目一定要抽时间看看别人的代码,先从跟你有关联的地方开始看,再看跟你没有关联的地方。第一可以学习别人设计好的地方和良好的代码。第二在添加功能和修改bug的时候可能需要跟他们的代码进行联系,之前读过他们的逻辑这样就很方便。

8 再添加一个游戏功能的时候一定要多考虑一些东西,在一些特殊的情况一定要多考虑,比如游戏的断线重连,考察需要还原的数据是否有你需要的。比如添加一个if条件, if myserver == 3. 你一定要去假象有没有myserver不定于3却又满足你逻辑的情况! 一定要多思考,不然会给别人带来很多的麻烦。

9.全局变量或者单利类 真的是有利有弊,今天算是体会到了。 exp.一个全局分配事件管理器g_eventManager,自己在一个类里面注册了事件A,但是在释放类的时候忘记删除了事件A,在下一个环境创建这个类的时候有一次注册了事件A! 所有在分配事件的时候你会发现A事件执行了两次!! 如此循环,程序直接卡死。

10 尽量不要出现这样的代码:
for (i = 0 ;i<20;i++)
{
if (a == getSelfData ())
}
关注这个getSelfData()函数,被调用了20次,其实这个值是固定的,其实你直接可以在外层写一个临时变量来保存这个数据,这样getSelfData 只会被调用一次!

11.在修改代码逻辑的时候需要加入新的逻辑变量,一定要注意在这个函数当中是否已经有了这个变量名称,否则会带来不可预料的后果。

12.写逻辑之前一定要先理清楚,在开始写代码,最好先画一个流程图来整理自己的思路!添加新的逻辑一定不要动原来的代码,如果你动了一个函数,那么已经定要检查是否多个逻辑都在调用这个函数,所谓接口的复用性还是有一定的弊端的,改了这个函数的逻辑,那么所有调用函数的功能逻辑都会发生改变。

13.服务器发送过来的消息逻辑一定要记录下来,游戏逻辑复杂必须要经过多次梳理!】

14 计算机运行的逻辑永远是正确的(虽然也有意外,)调bug的时候一定要多怀疑,排查每个函数不要点到为止,偶现bug 没有运行你预期的动作绝对就是有问题!锁定一个区域一定要仔细往下查!!

15 经常偶现bug在第一次的时候无法查出其中的原因,而我们应该做的事情是在怀疑的地方加上日志,这样在下次出现的时候就可以方便解决,当然,最简单的办法就是写代码的时候一定要考虑需要加入日志的地方,这很重要!

16 希望自己看完这段代码能够想起防御性编程:

function LoadingPanel:ctor(msg, atonce)    print("LoadingPanel1:new")    self.mMsg = msg    self.mCurDot = 0    self:enableNodeEvents()    self:initUI()    --在下一帧添加到场景中    print("LoadingPanel:ctor1,ref:"..tostring(self:getReferenceCount()))    self:retain()    print("LoadingPanel:ctor2,ref:"..tostring(self:getReferenceCount()))    local winSize = cc.Director:getInstance():getWinSize()    self.delayAddToSceneHandler = nil    self:setPosition(cc.p(winSize.width/2, winSize.height/2))    if atonce == true then         print("LoadingPanel1:addToScene")        cc.Director:getInstance():getRunningScene():addChild(self)     else        self:retain()        self.delayAddToSceneHandler = Utils.delayExcute(0, function()                                print("LoadingPanel1:addToScene")                                cc.Director:getInstance():getRunningScene():addChild(self)                                self.delayAddToSceneHandler = nil                                self:release()                                end)    end    print("LoadingPanel:ctor3,ref:"..tostring(self:getReferenceCount()))end
function LoadingPanel:destroy()    if self.delayAddToSceneHandler ~= nil then        Utils.cancelDelayExcute(self.delayAddToSceneHandler)        self.delayAddToSceneHandler = nil        self:release()    end    print("LoadingPanel1:destroy")    print("msgis"..self.mMsg)--    print("LoadingPanel:destroy1,ref:"..tostring(self:getReferenceCount()))    self:release()--    print("LoadingPanel:destroy2,ref:"..tostring(self:getReferenceCount()))    self:removeFromParent()end
1 0
原创粉丝点击