我们要惜字如金

  • 作者:KK

  • 发表日期:2016.5.28

  • 修改日期:2016.11.02


从我2008年学VB的时候开始就很计较每写的一行代码是不是多余了,能不能删减

我也觉察到自己是不是有什么强迫症,至于如此计较这些代码,其实搞不搞它们程序都能正常工作

但是渐渐地我写的代码越来越多,后来编写了一个3万多行代码的VB程序后,过2个月我进行维护时居然不太记得怎么改某个函数了,原因正是因为要改的函数太复杂,逻辑太不精简了,觉得有些字符计算又绕了弯子

后来我狠下心先精简这里的代码,把不必要的去掉,把独立的逻辑块封装掉,一个方法就剩下很清晰的A,B,C..几个大步骤了,后来维护这块代码时也方便了许多,于是当时就觉得:惜字如金,不写多余的代码,但又要保持逻辑清晰,正是这个习惯让我的程序更好维护


我所谓的惜字如金,其实并不是说把变量命名写短一点(当然一般也不能太长),把代码压缩一点

而是一些不必要的代码逻辑把它简化成没得更简的状态(通常运行效率都是高的)

不过有时候我也是为了代码比较好阅读而统一代码规范,只加1个空格就1个空格,多拍空格和换行的都会要求删掉

惜字如金是一种态度,侧面映射的是一种精益求精的思想,有这种思想才会追求更高的质量

说实话要是只着眼于把代码精简,这其实价值性不大,重要的是思想


下面一一细数一下我如何惜字如金的

有的可能是强迫症,但我并不承认所有都是强迫症,因为那样写真的很没必要!

  1. 数据库字段的类型是整型时我只写数字,不容许多余的引号

    数据库存一个类型值,1,2,3,4一共四个不同的值表示四种类型,则我会抗拒这样的代码:

    $db->where(['type' => '2'])
    //或者
    $db->where(['type' => "2"])
    

    这里引号绝对是多余的不必要输入的

    $db->where(['type' => 2])
    

    虽然其实写字符串'2'也不会出错,但是我不会纵容这样的代码在项目里留存,不是强迫症,而是我觉得这样会给看到这种代码的人一种“不严谨”、“没质量”等印象,我只想说我带的项目就是有质量

    我自己写的代码、我要求大家写的代码,都不允许这样画蛇添足


  2. JS里的key能不用引号就不用引号

    function Table(option){
    	this.width = option.width;
    	this.height = option.height;
    }
    	
    //不支持
    var table = new Table({
    	'width' : '100px',
    	'height' : '100px'
    });
    	
    //我会这样写
    var table = new Table({
    	width : '100px',
    	height : '100px'
    });
    

    这不是习惯,是在JS里要声明一个key一般情况下根本不需要加引号;还有,编辑器代码高亮区分更明显了不是吗?


  3. 返回值的代码不是很大很难阅读的话,直接把数组写在里面

    //不支持
    $data = [
    	'message' => $message,
    	'code' => $code,
    ];
    return $data;
    	
    	
    //我会这样写
    return [
    	'message' => $message,
    	'code' => $code,
    ];
    

    如果说产生一个$data变量只是为了让return那一行更加好阅读的话,那实际上对比两个代码的排版,是不是阅读成本都差不多?数组元素是不是都写成两行?


  4. 直接返回函数/方法的返回值,而不是先赋给变量

    $result = $db->table('xxx')->where($where)->exists();
    return $result;
    

    我不认为创建多个$result变量能带来什么好处,所以会直接

    return $db->table('xxx')->where($where)->exists();
    

  5. 数组赋值问题,分多句执行不如尽量一次性

    $user = [];
    $user['name'] = 'aaa';
    $user['age'] = 99;
    $user['vip'] = 7;
    	
    //应该改成一次性赋值:
    $user = [
    	'name' => 'aaa',
    	'age' => 99,
    	'vip' => 7,
    ];
    

    第一种写法换个现实的比方就是:进饭店坐下占张桌子,然后叫老板上一道叫name的菜,老板把菜上完后再叫老板上一道age的菜,上完后又叫老板上一道vip的菜,而现实中哪有人这样吃饭的嘛,应该直接在开头就一次性告诉老板要name age vip三个菜,而不是让人家做完一个再做下一个。如果CPU有血性,你看它不打你个鼻青面肿?


更多案例慢慢补充中,一下数不清,时间有限