编写可读代码的艺术读书笔记--简化和重新组织代码

来源:互联网 发布:mac mounty 灰色文件 编辑:程序博客网 时间:2024/06/05 17:24

第二部分:简化循环和逻辑

把控制流变得易读

关键思想:把条件、循环以及其他队控制流的改变做得越“自然”越好,运用一种方式使读者不用停下来重读你的代码。

拆分超长的表达式

关键思想:将超长的表达式拆分成容易理解的小块

例如:

if(request.user.id == document.owner_id){//user can edit this document}…If(request.user.id != document.owner_id){//document is read-only…

这段代码的主要概念是“该用户拥有此文档吗?”这个概念可以通过增加一个总结变量来表达得更清楚。

Final Boolean user_owns_document =(request.user.id == document.owner_id);If(user_owns_document){//user can edit this document}..If(!user_owns_document){//document is read-only}

变量与可读性

假设你有一个网页,上面由几个文本输入字段,布置如下:

<input type = “text” id = “input1” value= “Dustin”><input type = ”text” id = “input2”value=”Trevor”><input type = ”text” id = “input3” value= “”><input type = “text” id = “input4”value=”Melissa”>

你的工作是写一个叫setFirstEmptyInput()的函数,它接受一个字符串并把它放在页面上第一个空的<input>字段中,返回已更新的元素(如果没有剩下任何空字段则返回null)。

var setFirstEmptyInput = function(new_value){     var found = false;     var i = 1;     var elem = document.getElementById(‘input’+ i);     while(elem != null){         if(elem.value== ‘’){                   found= true;                   break;         }           i++;           elem= document.getElementById(‘input’ + i);      }     if(found) elem.value = new _value;          return elem;}

三个变量存在于整个函数中,并且写入了多次。中间变量(found)可以通过提前返回来消除,elem在整个代码中以循环的方式多次用到,这段代码让我们觉得elem就是在迭代的值,实际上只是在累加i。所以把while循环重写成对i的for循环。

var setFirstEmptyInput =function(new_value){         for(varI = 1; true; i++){                   varelem = document.getElementById(‘input’ + i);                   if(elem== null)                            returnnull;//Search failed. No Empty input found.                   if(elem.value==’’){                            elem.value= new_vlaue;                            returnelem;                   }               }}

第三部分:重新组织代码

抽取不相关的子问题

积极地发现并抽取出不相关的子逻辑。

1.      看看某个函数或代码块,问问自己,这段代码高层次的目标是什么?

2.      对于每一行代码,问一下,它是直接为了目标而工作吗?这段代码高层次的目标是什么?

3.      如果足够的行数在解决不相关的子问题,抽取代码到独立的函数中。

 

0 0
原创粉丝点击