上一章讲序的时候把前言也给总结了一下,这次的内容就只有提示一和二了。又是两个相对简单的内容。
提示1:关注你的技艺
提示2:思考!思考你的工作
这两点看上去非常简单,但是作者却说思考需要对每天里每一个项目所做的每一个决定进行批判性评估,这一点是非常困难的。看完我也是深有感触,就拿今天遇到的case举例。今天需要写一个小逻辑,把备注里面的数字拿出来赋值给另一个字段。我在询问BA确定备注里面只有数字的时候马上就有了思路,先用正则表达式过滤一下数字,没有问题就直接赋值,多简单啊。于是马上动手,在百度了几次并调试几下之后就有了这一段代码。
let intervalTime = parameter.intervalTime;
if (parameter.followRemark && !!device.remark) {
intervalTime = isPositiveNumber(device.remark.trim()) ? device.remark.trim() : intervalTime;
}
function isPositiveNumber(val) {
var regPos = /^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$/; //正浮点数
return regPos.test(val);
}
你看多快多好,单元测试都跑了,还考虑了0和空格的case,a piece of cake。正好今天周一大家有比较有空,我就顺手让东哥帮忙review一下代码。结果东哥看到代码就说。
“这个正则有点复杂啊。”
“啊,是的,网上直接找的,写了注释还好。”
“那为什么要这么复杂,为什么要支持浮点数,整数不就好了?”
“额,这个就是我顺手支持了一下,理论上SSC用的时候估计是整数。”
“那页面上有没有支持过浮点数,浮点数会不会有问题?”
“额,这个我还没有考虑过,待会我回去看看。”
“你这个正则加上匹配开头和结尾的符号不是只能匹配纯数字了吗?为什么不去掉。”
“这个问过BA,使用的时候只会写数字。”
“但是你只要去掉这两个符号不是更强大吗?客户使用系统的时候不会知道到底要怎么填的。”
“有道理。”
回去之后我看了一下,这个字段代表分钟,页面上果然只支持整数,但是这个字段是在接口中乘以60当做秒来使用的,文档里面也没有写明是否支持,不过里面的sample是一个整数,考虑到一直以来整数就够,所以我后来也改成了整数,并且支持了从字符串中提取数字,最后的代码长成了这样:
let regPos = /[0-9]*[1-9][0-9]*/; //正整数
let intervalTime = parameter.intervalTime;
if (parameter.followRemark && !!device.remark) {
intervalTime = regPos.test(device.remark) ? regPos.exec(device.remark) : intervalTime;
}
在经过和东哥的交流以后,我才发现刚刚写的代码居然有这么多问题,可最开始我写的时候完全没有意识到。当然,你也可以说用户根本不会这样去使用,所以最开始的代码和最后的代码没有区别。可是这样明显就不符合今天的主题:关注你的技艺和思考你的工作了。工作中经常遇到这样想当然的情况,要想务实提高自己的编码水平就需要时刻多问自己几个为什么,思考自己写下的每一行代码。
想清楚了再开始动手!多思考一下每一行代码的含义!我的程序员修炼之道,任重道远。
网友评论