首页 > 代码库 > 编码最小单位:代码块。
编码最小单位:代码块。
代码块:完成一定功能的一系列的代码 ,或者是几行代码 或者是 连续调用几个函数。
将代码分割成代码块,或者通过分割成单独的函数 又或者 仅是录入几行空白部分实现。
在完成一定功能的代码块中最好不要加入其他功能的代码 且 要注意代码块的顺序性 尤其是在代码块间存在着数据共享。
上文源于实际开发中、且代码排查花费了12人时。
伪代码举例:
①、存在TimerManager类,其属性有List<ActionTimer> list、方法有removeTimer(id:String)、run():每秒都遍历计时器list,
②、存在ActionTimer接口,其属性有leftTime、timerId、方法有run():剩余时间减一并产生相应的变化,runOver():剩余时间为0后发生的变化。
出现的问题是:在部分计时器剩余为0时,list的remove(index)报越界错误:index 大于了 list.length。
private function run():void{ for(index;index<length;index++) { if(list[index].leftTime>0) { list[index].run(); } else { list.remove(index); //位置① lenght--; //位置② index--; //位置③ list[index].runOver(); //代码① } }}public function removeTimer(timerId:String):void{ for遍历List<ActionTimer>;
如果找到actionTimer.getTimerId() == timerId ;
则执行list.remove(index) 移除该actionTimer; //该操作会影响list的length}
具体原因是:有人在继承 ActionTimer接口的类中的runOver()中再次调用TimerManager.removeTimer(this.timerId)、且代码①的位置放到了位置①的前边。
深层原因:错误排查人员菜鸟一枚、 继承的ActionTimer接口的类可读性差、未重视继承的ActionTimer接口的类的runOver()排查不全面、开发人员间沟通不充分致使TimerManager类的功能未充分了解同时多一次调用了remove()。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。