if else 深度优化
一. if else表达式过于复杂
if ((condition1 && condition2 ) || ((condition2 || condition3) && condition4)) {
}
问题解决:分解条件表达式,分解成多个独立的函数,为分解的新函进行良好的命名,从而更清楚表达自己意图。
if (date.before(SUMMER_START) || date.after(SUMMER_END)) {
}
// 优化后
if (notSummer(date)) {
}
二. if else 嵌套过深
public void workOrRest {
if (isWorkDay()) {
System.out.println("sad,is work day!!!");
} else {
if (isWorkTime()) {
System.out.println("shit,is work time!!!");
} else {
rest();
System.out.println("happy happy happy!!!");
}
}
}
解决办法:通过卫语句,有时候条件式可能出现在嵌套n次才能真正执行,其他分支只是简单报错返回的情况,对于这种情况,应该单独检查报错返回的分支,当条件为真时立即返回,这样的单独检查就是卫语句(guard clauses).卫语句可以把我们的视线从异常处理中解放出来,集中精力到正常处理的代码中。
public void workOrRest {
if (isWorkDay()) {
System.out.println("sad,is work day!!!");
return;
}
if (isWorkTime()) {
System.out.println("shit,is work time!!!");
return;
}
rest();
System.out.println("happy happy happy!!!");
}
三. if else过多
if (houseName.equals("Targaryen")) {
...
System.out.println("Blood and fire");
} else if (houseName.equals("Baratheon")) {
...
System.out.println("Ours is the Fury");
} else if (houseName.equals("Stark")) {
...
System.out.println("Winter is coming");
} else if (houseName.equals("Lannister")) {
...
System.out.println("Hear Me Roar");
} else if (houseName.equals("Arryn")) {
...
System.out.println("as High as Honor");
} else if (houseName.equals("Tyrell")) {
...
System.out.println("Growing Strong");
} else if (houseName.equals("Tully")) {
...
System.out.println("Family, Duty, Honor");
} else if (houseName.equals("Martell")) {
...
System.out.println("Unbent, Unbowed, Unbroken");
} else if (houseName.equals("Greyjoy")) {
...
System.out.println("We Do Not Sow");
} else {
...
System.out.println("world peace");
}
问题解决:利用策略or状态模式,消除业务判断,各之类分别关注自己的实现,大大降低了系统各部分之间的依赖。利用Map缓存分支状态信息。基本可以达到对修改封闭,对扩展开放。
<property name="thronesMap">
<map>
<entry key="Targaryen"><bean class="game.of.thrones.TargaryenStrategy"/></entry>
<entry key="Baratheon"><bean class="game.of.thrones.BaratheonStrategy"/></entry>
<entry key="Stark"><bean class="game.of.thrones.StarkStrategy"/></entry>
<entry key="Lannister"><bean class="game.of.thrones.LannisterStrategy"/></entry>
<entry key="Arryn"><bean class="game.of.thrones.ArrynStrategy"/></entry>
<entry key="Tyrell"><bean class="game.of.thrones.TyrellStrategy"/></entry>
<entry key="Tully"><bean class="game.of.thrones.TullyStrategy"/></entry>
<entry key="Martell"><bean class="game.of.thrones.MartellStrategy"/></entry>
<entry key="Greyjoy"><bean class="game.of.thrones.GreyjoyStrategy"/></entry>
<entry key="Default"><bean class="game.of.thrones.DefaultStrategy"/></entry>
</map>
</property>
public interface GameOfThronesStrategyService {
/**
* 具体实现处理
*/
void mainTitle();
}
thronesMap.get(houseName).mainTitle();
if else 深度优化的更多相关文章
- ASP.NET WebApi 文档Swagger深度优化
本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明博客园蜗牛原文地址,cnblogs.com/tdws 写在前面 请原谅我这个标题党,写到了第100篇随笔,说是深度优化,其实也并没有什么深度 ...
- MySQL内核深度优化
版权声明:本文由简怀兵原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/179 来源:腾云阁 https://www.qclo ...
- 深度优化LNMP之Nginx [2]
深度优化LNMP之Nginx [2] 配置Nginx gzip 压缩实现性能优化 1.Nginx gzip压缩功能介绍 Nginx gzuo压缩模块提供了压缩文件内容的功能,用户请求 ...
- 深度优化LNMP之Nginx (转)
深度优化LNMP之Nginx Nginx基本安全优化 1.调整参数隐藏Nginx版本号信息 一般来说,软件的漏洞都和版本有关,因此我们应尽量隐藏或清除Web服务队访问的用户显示各类敏感信息(例 ...
- 深度优化LNMP之PHP (转)
深度优化LNMP之PHP PHP缓存加速介绍 1.操作码介绍及缓存原理 当客户端请求一个php程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码文件(Operate ...
- 腾讯云数据库团队:浅谈如何对MySQL内核进行深度优化
作者介绍:简怀兵,腾讯云数据库团队高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MySQL内核开发工作 ...
- 百度APP移动端网络深度优化实践分享(二):网络连接优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<二>连接优化>,感谢原作者的无私分享. 一.前言 在<百度APP移动端网 ...
- 百度APP移动端网络深度优化实践分享(一):DNS优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<一>DNS优化>,感谢原作者的无私分享. 一.前言 网络优化是客户端几大技术方 ...
- 举个栗子看如何做MySQL 内核深度优化
本文由云+社区发表 作者介绍:简怀兵,腾讯云数据库高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MyS ...
- [sql]大型网站MySQL深度优化揭秘
大型网站MySQL深度优化揭秘 第1章优化的思路和线路 1.1 网站优化的思路 2 1.2 MySQL优化,nginx这样的东西怎么优化? 第2章硬件层面优化 2.1 数据库物理机 2.1.1 ...
随机推荐
- 在vue项目中遇到关于对象的深浅拷贝问题
一.问题 项目里新添加了一个多选的功能,其显示的数据都是从后端返回过来的,我们需要在返回来的数据外再额外添加一个是否选中的标记,我的选择是在返回正确的数据时将标记添加进去,然后push到数组中.然后就 ...
- C语言学习书籍推荐《你必须知道的495个C语言问题》
萨米特 (Steve summit) (作者), 孙云 (译者), 朱群英 (译者) 下载地址:点我 <你必须知道的495个C语言问题>以问答的形式组织内容,讨论了学习或使用C语言的过程中 ...
- linux应用程序设计--GCC程序编译
GCC程序编译 linux系统下的GCC(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作之一.GCC可以在多种硬件平台上编译出可执行程序,其执行效率与一 ...
- 【不带权图算法之拓扑排序】-C++
拓扑排序算法主要由以下两步循环执行,直到不存在入度为 的顶点为止. 选择一个入度为 的顶点并将它输出: 删除从该顶点连出的所有边. 循环结束,若输出的顶点数小于图中的顶点数,则表示该图中存在回路,也就 ...
- C#3.0新增功能10 表达式树 04 执行表达式
连载目录 [已更新最新开发文章,点击查看详细] 表达式树 是表示一些代码的数据结构. 它不是已编译且可执行的代码. 如果想要执行由表达式树表示的 .NET 代码,则必须将其转换为可执行的 IL ...
- (读论文)推荐系统之ctr预估-DeepFM模型解析
今天第二篇(最近更新的都是Deep模型,传统的线性模型会后面找个时间更新的哈).本篇介绍华为的DeepFM模型 (2017年),此模型在 Wide&Deep 的基础上进行改进,成功解决了一些问 ...
- 织梦(dede)底层模板概念、常用底层模板字段
织梦(dede)底层模板概念.常用底层模板字段 一.底层模板的概念以及调用方式: 1. 什么是底层模板? 底层模板不是一个模板! 他就是在实际页面当中所要显示的具体内容: 2. 底层模板的应用: 调用 ...
- 爬虫之解析库pyquery
初始化 安装: pip install pyquery 字符串的形式初始化 html = """ <html lang="en"> < ...
- context创建过程解析(二)之deployWARs
HostConfig.deployApps() //在监听到start事件类型,也就是StandardHost调用startInternal protected void deployApps() { ...
- python pip安装requests库总提示:Fatal error in launcher...''
1.python pip安装提示:Fatal error in launcher...'' 我查看了网上都说是电脑同时安装了python2 和python3时候才会有这个错误,但实际上我电脑只安 ...