养成良好的代码编写习惯
1、定义任何变量都需要加类型,不确定类型的需要添加注释。目的是方便调试溯源和阅读代码。
2、模块间的数据引用在本模块写引用。比如背包道具有装备类型 type=EQUIP ,在背包里写拿到所有装备的接口getEquipData,在需要显示所有装备的地方如英雄穿戴就在英雄模块里写equipData = bag.getEquipData。
3、界面跳转和返回。无论跳转任何次,返回都可以实现。
1)定义面板类型。分为场景,面板,小弹窗。
2)定义界面层级。1级界面,2级界面,3级界面。
3)定义界面是否全屏,若全屏需要在跳转后关闭当前界面。
4)定义打开界面的方式,正常打开或跳转。
5)定义界面的通用接口,所有界面都需要实现这些接口,如
open(args);
close(backToLast:boolean);//关闭界面是否返回上一层
backData(args);//每个界面重写返回传参,一般return open用的args。
6)定义面板管理类,定义通用界面打开方法,定义每个界面的参数。
4、布尔值的判断和赋值。
1)用Math.max(n,0)而不是n || 0,因为n可能为负数。
2)return !!xx,两个非可以实现布尔值转换。
3)布尔值数组可以用值的位移操作来替代,目的是精简优化服务端数据的存储。
如有一个10天的奖励,领取了3,5,9天的奖励,用数组表示为[0,0,1,0,1,0,0,0,1]。
var cond: number = xxx;//想要知道第xxx个奖励是否已领取 var stateArr: number[] = [0,0,1,0,1,0,0,0,1]; if (stateArr[cond-1]) return true; else return false;
用值来表示
//原数组[0,0,1,0,1,0,0,0,1]的倒序100010100 parseInt(100010100,2) = 276 var cond: number = xxx;//想知道第xxx个奖励是否已领取 var stateFlag = 276; if (stateFlag >> (cond-1) & 1) return true; else return false;
5、排序。sort方法返回值是-1还是1的理解l。
1)从小到大。
var a = [1,3,2,5,4]; a.sort( (a,b)=>{ if(a>b) return 1; else return -1 } );
//等同于return a-b
2)从大到小。
var a = [1,3,2,5,4]; a.sort( (a,b)=>{ if(a>b) return -1; else return 1 } );
//等同于return b-a
6、变量的命名,根据所属模块和类型确定固定字符(如Bag---View),加上自定义字符(不要磨磨唧唧,取个名字用得着费多大劲儿),通俗易懂,首选英文,次选中文全拼,中文简拼一定记得写注释(不要过段时间自己都不认识了),控制长度。
1)BagItemTipView
2)BagTiShiView
3)/**背包通用道具*/BagTYDJView。写变量写注释写在变量前面,用/** */格式,这样在IDE()里面鼠标指到变量上会显示注释里的内容。
7、慎用对象传参。
//传递对象主要在赋值方面容易出问题 //若需要改变对象,如: var obj = null; change(obj) function change(objArg) { objArg = new ItemObject;//这个时候注意函数外面的obj并没有被重新赋值仍然是null,想实现这种操作只能是在外部写这句,或者改变原理obj的结构变成下面这种 } var obj = {obj:null}; change(obj) function change(objArg) { objArg.obj = new ItemObject; } //若不能改变传参对象,但又需要对该对象赋值啥的一堆操作,只能是复制一份传进来的对象 var obj = {id:3}; change(obj); function change(objArg) { var objCopy = ObjCopy(objArg); } //复制对象 function ObjCopy(src, dst?) { var newobj = dst || {}; if (src) { for (var name in src) { if (typeof src[name] === "object") { //先判断一下obj[name]是不是一个对象 newobj[name] = (src[name].constructor === Array) ? [] : {}; //我们让要复制的对象的name项=数组或者是json ObjCopy(src[name], newobj[name]); //然后来无限调用函数自己 递归思想 } else { newobj[name] = src[name]; //如果不是对象,直接等于即可,不会发生引用。 } } } return newobj; }
8、用思维导图来帮助自己整理目标任务。
9、不要瞻前顾后。
1)没有绝对完善的系统,不要过多的考虑需求之外的东西。需求没写,则不做。
2)不要考虑太多的容错,系统是具有局限性的,不需要去考虑怎么不让自己做的东西报错或者崩溃,太费时间,只需要考虑正常环境下的容错。
3)做东西前要想清除到底是按直线做下去然后通过迭代来完善枝干,还是做到有枝干的地方就先做好枝干再继续走。所谓专注。
10、做好备份,电脑很可能断电,死机,及时保存和备份是有用的,单靠SVN的记录是不靠谱的,SVN也会炸。