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 ...
随机推荐
- 有趣的PHP一句话
今天看到如下图所示的PHP一句话,觉得挺有意思. 代码如下: <?=~$_='$<>/'^'{{{{';echo $_;@${$_}[_](@${$_}[__]);?> 效果图 ...
- [USACO09OCT]Invasion of the Milkweed】乳草的侵占-C++
Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物大战人类中败下阵来.邪恶的乳草已经在他的农场的西北部份占领了一片立足之地. 草地像往常一样,被分割成一个高 ...
- CNN神经网络之卷积操作
在看这两个函数之前,我们需要先了解一维卷积(conv1d)和二维卷积(conv2d),二维卷积是将一个特征图在width和height两个方向进行滑动窗口操作,对应位置进行相乘求和:而一维卷积则只是在 ...
- cozmo 入坑日记及开发环境搭建
前几日,朋友在群里发了一个机器人的小视频,视频里机器人可以对话,可以推箱子,开心以后会哈哈大笑,非常有趣. 详细了解里一下,这是个叫 cozmo 的智能机器人,可以配合 SDK 用 python 编程 ...
- LiteIDE TARGETARGS -conf_path=E:/PokerServer/src/GameServer/conf/texas.xml -log_dir=E:/PokerServer/src/GameServer/main/log
LiteIDE TARGETARGS -conf_path=E:/PokerServer/src/GameServer/conf/texas.xml -log_dir=E:/PokerServer/s ...
- C#2.0新增功能02 泛型
连载目录 [已更新最新开发文章,点击查看详细] C# 语言和公共语言运行时 (CLR) 的 2.0 版本中添加了泛型. 泛型将类型参数的概念引入 .NET Framework,这样就可以设计具有 ...
- [leetcode] 905. Sort Array By Parity [easy]
原题链接 很水的一道题,就是数组内部交换. 水题就想着减少复杂度嘛,于是学到一种交换写法. class Solution { public: vector<int> sortArrayBy ...
- 知识图谱学习与实践(4)——通过例句介绍Sparql的使用
通过例句介绍Sparql的使用 1 简介 SPARQL的定义,是一个递归的定义,为SPARQL Protocal and RDF Query Language,是W3C制定的RDF知识图谱标准查询语言 ...
- 小白学python-day03-系统位数、变量、用户输入、if else
今天是day03,以下是学习总结. 但行努力,莫问前程. ----------------------------------------------------------------------- ...
- storm入门demo
一.storm入门demo的介绍 storm的入门helloworld有2种方式,一种是本地的,另一种是远程. 本地实现: 本地写好demo之后,不用搭建storm集群,下载storm的相关jar包即 ...