从函数编写要求到对工作经验的理解
从函数编写要求到对工作经验的理解
1、工作经验和工作时间的关系
一个人的工作经验可能并不取决于它的工作时间。
我们假设有这么一个公式,Y = 工作经验,y = 工作时间,x = 经验倍率那么 Y = x * y,你的工作经验取决于你的工作时间,但是也取决于你的经验倍率。你的x为10,从一个月工作时间里收获了别人十个月能收获的工作经验,自然更强。
目前市场已经不缺初级前端了,而是缺少能够开发像WEBQQ那一类的高级前端。
从前端学习的曲线来讲,是一个先平缓再陡峭再平缓的过程。但是很多人都卡在了平缓变陡峭哪一段,所以就会出现了:一堆初级前端找不到工作,一堆公司找不到好前端。
2、从一个JS面试题看你的编程经验:
// 编写一个函数fn,该函数有一个参数n(数字类型),其返回值是一个数组,该数组内是n个随机且不重复的整数,且整数范围是[2,32]。
我第一次的编写结果是这样的:
function fn(n){
if(typeof n != "number"){
return "Error!";
}
var arr = [];
for(let i = 0; i < n; i++){
// 随机[2,32]
let num = 2 + Math.round(30 * Math.random());
// 不重复
let flag = true;
for(let i = 0; i < arr.length; i++){
if(num === arr[i]){
flag = false;
break;
}
}
if(flag){
arr.push(num);
}else{
i--;
}
}
return arr;
}
这个函数可以用,但是也仅仅是可以用。还缺少了很多东西。
3、如何正确编写这个函数:
3.1、首先,编写函数写应该先明确思路,用伪代码描述这个过程
// 如我刚刚编写的 不完美的函数 的伪代码是:
function fnCorrect(n){
// 判断输入参数是否是数值型
judgeNum(n);
// 生成空数组存放
var num = [];
// 循环生成n个数
for(let i = 0; i < n; i++){
// 获得随机数
let num = gerRandom();
// 判断是否重复
flag = judgeRepetition(num,arr);
if(flag){
// 不重复,加入
arr.push(num);
}else{
i--;
}
}
return arr;
}
3.2、其次,考虑健壮性
健壮性,即兼容性处理、边界处理、异常处理、参数输入校验等问题
就刚刚我编写的函数来讲,我只考虑到了判断n是否是一个数字,而没有考虑另外2中情况:
①没有对n的取值范围做校验,n必须是1~31之间的整数。
②没有对n是否存在做校验。
所以健壮性不合格。
3.3、再者,考虑可靠性
可靠性,即在函数处理的任何情况下,都会返回一个可靠的结果
就刚刚的函数来说,表现为我们在对参数n做检验时,如果不合格,我们应该返回一个空数组。而不是没有任何返回。
3.4、最后,考虑宽容性
对需求宽容,对用户宽容,对调用者宽容,对维护者宽容
对于刚刚那个函数,我们应该考虑这么几种情况:
①如果需求调整,不再是[2,32]的范围,而是改变了其他范围,那么你的代码是否可以快速调整、甚至不用调整?
②如果n是一个字符串数字,是否允许进入函数?
③代码中,是否有足够多且清晰的注释?
4、总结
我们在编写一个函数时,”可用”是其最基本的要求,但是在可用的基础上,我们还要注重健壮性、可靠性、宽容性,具体表现即:
- 健壮性:对函数做兼容性处理、边界处理、异常处理、参数输入处理,使得函数在任何情况下都能按预想运行。
- 可靠性:任何情况下函数都会返回一个可靠的结果,而不是毫无返回值,让调用者不知道出了什么问题。
- 宽容性:做到如下几点
- 需求更改时,你的函数能够快速调整、甚至不用调整。
- 注释多且清晰明确。
- 对函数的输入值宽容,用户可能输入的是他想的,最经典的就比如 5和"5"
浙公网安备 33010602011771号