4.5 以卫语句取代嵌套条件式

【1】原代码

 1 double GetPayAmount()
 2 {
 3     double result;
 4     if (IsDead())
 5     {
 6         result = DeadAmount();
 7     }
 8     else
 9     {
10         if (IsSeparated())
11         {
12             result = SeparatedAmount();
13         }
14         else
15         {
16             if (IsRetired())
17             {
18                 result = RetiredPayAmount();
19             }
20             else
21             {
22                 result = NormalPayAmount();
23             }
24         }
25     }
26
27     return result;
28 }

【2】以卫语句取代嵌套条件式

 1 double getPayAmount()
 2 {
 3     if (isDead())
 4     {
 5         return deadPayAmount();
 6     }
 7     if (isSeparated())
 8     {
 9         return separatedPayAmount();
10     }
11     if (isRetired())
12     {
13         return retiredPayAmount();
14     }
15
16     return normalPayAmount();
17 }

【3】总结

函数中的条件逻辑使人难以看清正常的分支执行路径。使用卫语句表现所有特殊情况。

所谓卫语句,如果某个条件极其罕见,就应该单独检查该条件,并在该条件为真时立刻从函数中返回。这样的单独检查常常被称为“卫语句”。

Good Good Study, Day  Day Up.

顺序 选择  循环 总结

时间: 2024-10-12 15:58:33

4.5 以卫语句取代嵌套条件式的相关文章

简化条件表达式之以卫语句取代嵌套条件表达式(Replace Nested Conditional With Guard Clauses)

函数中的条件逻辑使人难以看清正常的执行途径.使用卫语句表现所有特殊情况. 动机:条件表达式通常有2种表现形式.第一:所有分支都属于正常行为.第二:条件表达式提供的答案中只有一种是正常行为,其他都是不常见的情况. 这2类条件表达式有不同的用途.如果2条分支都是正常行为,就应该使用形如if…..else…..的条件表达式:如果某个条件极其罕见,就应该单独检查该条件,并在该条件为真时立刻从函数中返回.这样的单独检查常常被称为“卫语句”. Replace Nested Conditional with

卫语句

卫语句 标签: 卫语句c语言重构 2015-05-05 19:52 1965人阅读 评论(0) 收藏 举报  分类: HW PeiXUN(2)  C程序设计(27)  版权声明:本文为博主原创文章,未经博主允许不得转载. 1.使用卫语句取代嵌套表达式 函数中的条件逻辑使人难以看清正常的执行途径.使用卫语句表现所有特殊情况. 动机:条件表达式通常有2种表现形式.第一:所有分支都属于正常行为.第二:条件表达式提供的答案中只有一种是正常行为,其他都是不常见的情况. 这2类条件表达式有不同的用途.如果2

关于INSERT EXEC 语句不能嵌套的解决办法

一.问题  之前做项目的时候遇到过要在一个存储过程要操作另一个存储过程返回的结果集,想通过调用的存储过程保存到局部临时表进行操作.执行下面的sql,会提示: 消息 8164,级别 16,状态 1,过程 zryCreatePlantPlanningReport,第 27 行 INSERT EXEC 语句不能嵌套. 1 DROP TABLE #demo 2 CREATE TABLE #demo 3 ( 4 ZK_PLANNING_ID NVARCHAR(50), 5 ZK_PLAN_TITLE NV

<06>变量使用前易犯错误总结+if语句介绍及基本格式+if-else语句及嵌套+if语句的高级用法+if语句的使用注意点+arc4random_uniform 函数导入一个头文件<stdlib.h>+

1)变量要初始化 -1 0  ,或者1 依据程序而定 ---------------------------------- if语句介绍及基本格式 分支语句结构 1)if 格式: if(表达式/常量/变量){ 语句块1; } 原理: 1)先计算小括号中的表达式的值 真(1) 会执行 大括号中的语句 假(0) 不会执行 大括号中的语句 2) switch 1 #include <stdio.h> 2 3 int main(int argc, const char * argv[]) { 4 5

Java知多少(48)try语句的嵌套

Try语句可以被嵌套.也就是说,一个try语句可以在另一个try块内部.每次进入try语句,异常的前后关系都会被推入堆栈.如果一个内部的try语句不含特殊异常的catch处理程序,堆栈将弹出,下一个try语句的catch处理程序将检查是否与之匹配.这个过程将继续直到一个catch语句匹配成功,或者是直到所有的嵌套try语句被检查耗尽.如果没有catch语句匹配,Java的运行时系统将处理这个异常.下面是运用嵌套try语句的一个例子: 1 // An example of nested try s

Mysql update语句赋值嵌套与在表列中数据后面增加数据

1.Mysql update语句赋值嵌套select  点击(此处)折叠或打开 update a set col=(select col from a where id='5') where id>5 and id<10; 报错了 ERROR 1093 (HY000): You can't specify target table 'a' for update in FROM clause 经过研究 发现是 mysql 定义update语句不能同时对同一张进行set 赋值操作,也就是说 upd

Java基础---Java条件语句之嵌套if(二十)

Java条件语句之嵌套 if 嵌套 if 语句,只有当外层 if 的条件成立时,才会判断内层 if 的条件.例如,活动计划的安排,如果今天是工作日,则去上班,如果今天是周末,则外出游玩:同时,如果周末天气晴朗,则去室外游乐场游玩,否则去室内游乐场游玩. 语法:  执行过程:  例如: 运行结果: 代码: public class Helloworld {            public static void main(String[] args) {          int score

mybatis框架中parameterType为Map的用法 和 数据库语句多层嵌套

当需用到参数Map里面的数据时,直接写传进去的key,例Map map = new HashMap(); map.put("currPage1",10); 在mybatis的xml文件中需要引用的地方写上currPage1,如下文 数据库语句多层嵌套时,先执行最里层的语句,表的别名定义语句的最里层,红色字体是多表联查时定义的查询最大记录数 例: <select id="query" parameterType="java.util.Map"

慕课网-安卓工程师初养成-4-4 Java条件语句之嵌套 if

来源:http://www.imooc.com/code/1356 嵌套 if 语句,只有当外层 if 的条件成立时,才会判断内层 if 的条件.例如,活动计划的安排,如果今天是工作日,则去上班,如果今天是周末,则外出游玩:同时,如果周末天气晴朗,则去室外游乐场游玩,否则去室内游乐场游玩. 语法:  执行过程:  例如: 运行结果: 任务 请在代码编辑器中补全代码实现赛程设置:预赛成绩大于 80 分的可进入决赛,然后根据性别再划分为男子组决赛和女子组决赛. 运行结果为: 1 public cla