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

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

把控制流变得易读

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

拆分超长的表达式

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

例如:

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.      如果足够的行数在解决不相关的子问题,抽取代码到独立的函数中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值