if/else的优化方法

  1)if/else 语句块的顺序

    首先处理正逻辑而不是负逻辑

    先处理简单的情况

    先处理有趣的或者是可疑的情况

  2)通过提早返回减少嵌套

  3)总结变量

    用一个短很多的名字来代替一大块代码,这就是总结变量。

    使用德摩根定理,分解复制的判断逻辑

    拆分巨大的语句,让语句更容易快速阅读

  4)分析函数(或代码块)画出逻辑树

    逻辑树是整合1)和2)两个部分,为了理清复杂if语句逻辑二产生的。

    逻辑树的结构与哈夫曼树类似

    逻辑树规则:(模块的定义:每一个if/else的分支即为一个模块)

      1.每个模块都是一个根结点,每一个根结点都会结束函数运行。

      2.同等级的模块(即if语句的正反两面),无子模块的模块(内部无if语句)优先级高于拥有子模块的模块(内部嵌套if语句)

      3.同等级和同条件(两个模块都拥有子模块或者都没有子模块)的情况下,使用率高的模块优先级高于使用率低的

      4.若模块中包含子模块,子模块的优先级高于父模块。

     如下程序

if(user_result == SUCCESS ){

  if( permission_result != SUCCESS){

    reply.WriteErrors("error reading permissions");

    reply.Done();

    return;

  }

  reply.WriteErrors("");

}else{

  reply.WriteErrors(user_result);

}

reply.Done();
return;

  可将程序分为绿、红、紫三模块,蓝色是前置条件,黑色是共有部分。

   根据上述规则

    1.根据规则2,紫、红两个属于同等级模块,但是由于红色模块中包含一个子模块,所以红色模块优先级低于紫色模块

    2.根据规则4,绿色模块属于红色模块子模块,所以绿色模块优先级高于红色模块

    3.根据1,2,函数的优先级排列由高到低为:紫色>绿色>红色

   结果为:

if(user_result != SUCCESS){

  reply.WriteErrors(user_result);

  reply.Done();

  return;

}

if(permission_result != SUCCESS){

  reply.WriteErrors(permission_result);

  reply.Done();

  return;

}

reply.WriteErrors("");

reply.Done();
return;
时间: 2024-10-13 00:59:41

if/else的优化方法的相关文章

垃圾邮件过滤优化方法

垃圾邮件过滤优化方法 通过honeypot project 搜集大量垃圾邮件数据 通过解析邮件header 获取垃圾邮件发送路径和服务器相关信息 对编写错误的单词的修正 比如:w4tch 对相同含义的词进行归类处理,比如:discount 和discounts   (可以通过porter stemmer,下面就是该算法c语言的一种实现) /* This is the Porter stemming algorithm, coded up in ANSI C by the author. It m

Linux网络性能优化方法简析

Linux网络性能优化方法简析 2010-12-20 10:56 赵军 IBMDW 字号:T | T 性能问题永远是永恒的主题之一,而Linux在网络性能方面的优势则显而易见,这篇文章是对于Linux内核中提升网络性能的一些优化方法的简析,以让我们去后台看看魔术师表演用的盒子,同时也看看内核极客们是怎样灵活的,渐进的去解决这些实际的问题. AD:2014WOT全球软件技术峰会北京站 课程视频发布 对于网络的行为,可以简单划分为 3 条路径:1) 发送路径,2) 转发路径,3) 接收路径,而网络性

Caffe学习系列(8):solver优化方法

上文提到,到目前为止,caffe总共提供了六种优化方法: Stochastic Gradient Descent (type: "SGD"), AdaDelta (type: "AdaDelta"), Adaptive Gradient (type: "AdaGrad"), Adam (type: "Adam"), Nesterov’s Accelerated Gradient (type: "Nesterov&qu

php-fpm优化方法 pm.min_spare_servers、pm.max_spare_servers 的真实意义

php-fpm 进程池优化方法 php-fpm进程池开启进程有两种方式,一种是static,直接开启指定数量的php-fpm进程,不再增加或者减少:另一种则是dynamic,开始时开启一定数量的php-fpm进程,当请求量变大时,动态的增加php-fpm进程数到上限,当空闲时自动释放空闲的进程数到一个下限.这两种不同的执行方式,可以根据服务器的实际需求来进行调整. 要用到的一些参数,分别是pm.pm.max_children.pm.start_servers.pm.min_spare_serve

30多条mysql数据库优化方法,千万级数据库记录查询轻松解决【转】

转自:http://www.ihref.com/read-16422.html 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描, Sql 代码 : select id from t where num is null; 可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,然后这样查询: Sql 代码 : s

mark---[mysql多表关联查询的优化方法]

对于一个网站来说,数据库的结构至关重要.即要利于存储(入库不阻塞),又要利于查询(查询不锁表).网站数据库优化经验是一个积累的过程.下面就对多表关联查询的优化方法,举例说明. 现在社区分享类网站很火,就拿方维购物分享网站举例说明吧.也是对二次开发方维购物分享网站的一点总结,高手可以飞过. 购物分享的关键表有:分享表.图片表.文件表.评论表.标签表.分类表等. 围绕分享的表就么多,哇,那也不少啊.当我们查看一个图片的详细信息时,就要显示以上表里的信息.显示图片所属的分类.给图片打的标签.图片的评论

基于页面染色技术的内存数据库访问优化方法

本发明公开了一种基于页面染色技术的内存数据库访问优化方法.该方法首先将弱局部性数据集的所有数据页面的访问顺序按页面颜色进行排序,并将所有数据页面按页面颜色进行分组,然后按页面颜色分组的顺序扫描弱局部性数据集的所有数据页面.进一步地,预设若干具有相同页面颜色的内存页面作为页面颜色队列,该页面颜色队列用作内存页面被加载入CPU缓存之前的内存缓存:弱局部性数据集的数据页面首先通过异步方式进入页面颜色队列,然后再被加载到CPU缓存中完成数据处理.本发明能够解决内存数据库应用中无法依赖页面颜色为进程.线程

二级域名的优化方法

因为百度的一次大更新,一些之前完好的网站都被无情得k掉.只剩下一些二级域名,由于主站的庇佑还活着,不得已只能开始着手优化二级域名的站了. 大家都知道二级域名不同一级域名,就连换友链也是坑爹的,人家一看到二级域名就懒得来换了.而且各方面优化起来还是比较难的,那么,二级域名到底该如何优化呢? 优化二级域名最有效的一点就是提高主站权重. 对于搜索引擎来说你的二级域名是一个独立的站点,同时它也和我们的主域名网站有着很微妙的关系.我们可以打个比方,假如我们有一个主站,而如果我们在短期内在这个主域名下开通了

DevExpress ChartControl大数据加载时有哪些性能优化方法

DevExpress ChartControl加载大数据量数据时的性能优化方法有哪些? 关于图表优化,可从以下几个方面解决: 1.关闭不需要的可视化的元素(如LineMarkers, Labels等): Series.View.LineMarkerOptions.Visible =false. 2. 关闭图表的滚动与缩放功能,手动调整范围,这样将大大减少所需计算的个数. 3. 将 ChartControl.RefreshDataOnRepaint属性设为false 4. 将 ChartContr

LCA 各种神奇的LCA优化方法

LCA(Least Common Ancestors) 树上问题的一种. 朴素lca很简单啦,我就不多说了,时间复杂度n^2 1.倍增LCA 时间复杂度 nlongn+klogn 其实是一种基于朴素lca的优化方法, 朴素lca只能一层层的向上查询,而这个有一定状态压缩的想法 即每一次跳2^i层,让O(n)的查找变成O(logn). 以上就是我对倍增lca的理解. 以洛谷P3128为例, [USACO15DEC]最大流Max Flow 题目描述 Farmer John has installed