文档章节

代码大全图书笔记----第十九章

madbooker
 madbooker
发布于 2014/05/02 10:40
字数 744
阅读 381
收藏 13

第十九章 一般控制问题

1.布尔表达式

   A:布尔表达式:

   (1)用true和false作布尔判断,不要使用1和0

   

   (2)隐式地比较布尔值与true和false,例如:

while(not done)

{

 do sth.....

}

而不要写成:

while((not done)== true)

{

 do sth.....

}

   

   B:简化复杂的表达式:

   (1)拆分复杂的判断并引入新的布尔变量,把复杂的表达式做成布尔函数。

例如:

if((correctName() && correctPsw() && correctRole && TransformOK()  ))
{
process log in.......
}


可以简化为:

function checkUser()//封装为一个布尔函数
{
   if(correctName() && correctPsw())
   {
if(!correctRole())
{
return false;
}
return true;
   }
   else
   {
return false;
   }
}
//只关心我需要关心的部分
if((checkUser() && TransformOK()))
{
process log in.......
}


   C:编写肯定形式的布尔表达式

(1)在if语句中,把判断条件从否定形式转化为肯定形式,并且互换if和else子句中的代码。

 

if(!statusOK)
   {
    //do sth
   }
   else
   {
    //do sth else
   }
   改为:
   if(statusOK)
   {
    //do sth else
   }
   else
   {
    //do sth
   }


(2)用狄摩根定理简化否定的布尔表达式(狄摩根定理)

   例如:if(!displayOK || !printerOK) <===> if(!(displayOK&&printOK))


   D:理解布尔表达式如何求值

不同的编程语言对布尔表达式的求值方法不同,有的编程语言采用“短路”求值,而有的编程语言会分别计算布尔表达式中每一项的值然后再计算组合后的值。

不应当依赖于特定语言对布尔表达式的求值方法,而应该尽可能编写实践良好的代码,例如:(伪代码)


不好的实践:

while(i<MAX_ELEMENT and item[i] !=0 )

这段代码的问题是,如果所使用的语言不是短路求值,那么当i=MAX_ELEMENT的时候,循环体内部代码不执行,而循环判断条件,item[i] <==>item[MAX_ELEMENT],程序就会报错,因为下标越界,因此,应当改为如下:

while(i<MAX_ELEMENT)
{
    if(item[i] != 0)
    {
        do sth;
    }
}


2.深层嵌套处理

嵌套过深的if代码使代码阅读者难以理解,因此应当避免使用超过3到4层的代码嵌套。


(1)通过重复检测条件中的某一部分来简化嵌套的if语句。

例如:

糟糕的实践:
if($inputStatus == Input_Success)
{
    do sth
    if($printRoutine != NULL)
    {
        do sth
        if(SetUpPage())
        {
            do sth
            。。。
        }
    }
}

应当改为:

if($inputStatus == Input_Success)
{
    do sth;
    if($printRoutine != NULL)
一般控制问题    {
        do sth;
    }
}


//重复条件判断
if( 
($inputStatus == Input_Success) && 
($printRoutine != NULL) && 
(SetUpPage()) 
   )
{
if(。。。。)
{
。。。
}
}


(2)把嵌套的if转换成一组if-then-else语句(避免决策树中的冗余判断)


糟糕实践:
if(10<quantity)
{
if(100<quantity)
{
if(1000<quantity)
{
discount = 0.10;
}
else
{
discount = 0.05;
}
}
else
{
discount = 0.025;
}
}
else
{
discount = 0.0;
}


这段代码让人很难理解决策的逻辑是怎样的,在不改变决策树逻辑的情况下,代码应当被更好的组织:

if(1000 < quantity)

{

discount = 0.10;

}

else if((100 < quantity) && (quantity < 1000))

{

discount = 0.05;

}

else if((10 < quantity) && (quantity < 100))

{

discount = 0.025;

}

else if(quantity <= 10)

{

discount = 0.0;

}


(3)将深层嵌套中的某些部分抽取成子程序或方法。




  


© 著作权归作者所有

madbooker
粉丝 5
博文 12
码字总数 12254
作品 0
南京
程序员
私信 提问
《HTML+CSS3权威指南》笔记摘要 - 目录

主要是想借助这个平台让大家给我学习途中的错误和不好的地方给与纠正。 我会努力最短时间内完成更新,如果发现有错别字或者Code错误,请指出。 信息:建议使用Opera10以上或者Google浏览器测...

产品哥
2011/12/02
416
1
《吴恩达 - 机器学习 - 笔记》文集小结

该系列文章为,观看“吴恩达机器学习”系列视频的学习笔记。虽然每个视频都很简单,但不得不说每一句都非常的简洁扼要,浅显易懂。非常适合我这样的小白入门。 这里笔者要絮絮叨叨一番: 其实...

tomas家的小拨浪鼓
03/17
0
0
【原创】《深入剖析Tomcat》读书笔记

第一章 一个简单的Web服务器 第二章 一个简单的servlet容器 第三章 连接器 第四章 Tomcat的默认连接器 第五章 servlet容器 第六章 生命周期 第七章 日志记录器 第八章 载入器 第九章 Sessio...

pandudu
2015/12/22
46
0
【把经典读薄】《代码大全2》读书笔记之一 使用变量的一般事项

代码大全第二版 第十章 使用变量的一般事项 读书笔记 General Issues in Using Variable 把第十章作为开篇重读《代码大全》,并做好详细的读书笔记,希望它能给我全新的收获。 10.0 前言 利用...

长平狐
2012/11/12
114
0
运维工作解释

运维工作解释 2017/3/9 PC小记:《运维之下》的文档作者对运维工作的解释清晰明了,有利于工作的划分和职业的规划,因而值得整理后分享。 https://github.com/opera443399/ops/tree/master/d...

pcnk
2017/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.2K
15
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部