养成良好的代码编写习惯

时间:2020-05-19
本文章向大家介绍养成良好的代码编写习惯,主要包括养成良好的代码编写习惯使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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;
    }

原文地址:https://www.cnblogs.com/chickenfarm/p/12919212.html