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

来源:互联网 发布:手机知乎保存不了图片 编辑:程序博客网 时间:2024/05/21 09:08

问题描述

这里写图片描述

可用

// 核心功能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;}
原创粉丝点击