10. 如何应对代码错误
在我们日常写代码的过程中,即使有IDE的辅助,我们依然可能会犯一些错误。这些错误超出了IDE的解决范围,可能需要写代码的人非常的小心与注意。对于新手程序,细心往往是个需要长期培养的事。对于这种情况,我们应该如何避免类似的错误发生?
我们来看一个例子:
egret.Tween.get(this.imgPlayer,{loop:true}).to({ alpha: 0};
上面的例子中,想对imgPlayer进行一个透明度变换。但是一直没有生效,真实原因是这边的this.imgPlayer实际上不是一个成员变量,而是一个函数,所以这边的正确做法是:
egret.Tween.get(this.imgPlayer(),{loop:true}).to({ alpha: 0};
对于我们这个例子,最终的修复手段不是那么的重要。我们要思考的是如何规避这种错误。
对于这个问题,我们应该认识到egret.Tween.get并没有对传入的对象做检测,对于这个库而言,这个检测不一定是它的责任,理论上它允许对一个函数进行变换也不是什么大的问题。但是,对于我们的逻辑,我们基本不可能对一个函数进行变换,所以在我们的项目中,就应该具备这个检测。所以我们可以将这个函数进行封装,并要求大家统一都使用封装好的函数。在这个封装好的函数内部,对第一个参数进行判断,如果是函数就直接断言。
封装是我们应对常见的项目问题的一个有效的处理手段。在后面的例子中我们将会更多的看到类似的处理手段。当然,封装仅仅只是一个手段,我们还可以从工具链的角度来规避这些可能的犯错。
这边我们还可以认识到统一规范的重要性。当项目中存在了一个实现与底层接口一致的时候,我们应该优先选择项目中的实现。对于一个程序而言,他应该更多的时候大家封装好的接口。对于一个策划而言,他只能通过配置生成为程序需要的配置,而不能直接去手动修改最终生成的配置。统一化的流程意味着我们可以在各个阶段对错误进行有效的规避。
面对错误,除了代码的手段来规避外,作为项目的主程,还需要统一思想。这个过程包括要求大家遵循统一的代码命名等,这也是规避错误的一个重要手段。越是相似的代码风格,代码的阅读速度就会越快。