由一个函数引发的改进思考

问题描述

这里写图片描述

可用

// 核心功能
function fn(n){
    var arr = [];
    for(var i=0; i<n; i++){
        var rnd = getRand(2,32);
        if(checkInArr(arr,rnd)){
            i--;
        }else {
            arr.push(rnd);
        }
    }
}

健壮

  • 对n的取值范围做校验(n必须是1~31之间的整数)
  • 对n是否为数字做校验
  • 对n是否存在做校验

可靠

尽可能在任何情况下,都返回一个可靠的结果,包括在异常情况下。

function fn(n) {
    // 健壮性校验
    if(!isThere(n)) return [];
    if(!typeOK(n)) return [];
    if(!rangeOK(n)) return [];
    // 核心功能同上,略。
}

宽容

  • 若n是一个字符串数字,能否进入处理流程?
  • 若n是一个含有小数的数字,能否进入处理流程?
  • 注释!!
  • 若需求调整了[2,32]的范围,能否快速调整甚至不用调整?
/*
* 获取指定个数的随机整数,整数范围[2,32]
* @param {number} n需要的整数个数
* @return {array} 返回包含n个证书的数组,如果n非法,则返回空数组
*/
function fn(n) {
    // 将整数范围做为变量提取出来
    var min=2, max=32;
    // 参数校验
    if(!isThere(n)) return [];
    if(!typeOK(n) && !isOKStr(n)) return [];
    n = formatInitNum(n);
    if(!rangeOK(n, min,max)) return [];
    // 准备一个容器保存结果
    var arr = [];
    for(var I=0; I<n; I++) {
        var rnd = getRand(min,max);
        //检查是否重复
        if(checkInArr){
            I--;
        }else {
            arr.push(rnd)
        }
    }
    return arr;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值