提高代码质量系列之二:重构小技巧——if篇
2024-08-25 04:15:02
前言:
if,相信是童鞋们使用的最频繁的关键字了,而且很多时候,我们使用的if都是在无意识的状态下随手而为。键入if,两下回车(我使用了resharper,可以自动编排if的格式),再信手写下我们需要的逻辑,一段可以“正常运行”的代码就被我们实现了。尽管这段逻辑比较复杂,但在那个时间段,我们对这段业务的前后流程已经有了很长时间的思考,所以可以比较轻松的写出来。但问题来了,一段时间之后,我们发现这里需要修正下,更或者是为了提高鲁棒性,需要为某个变量考虑更多的情况——即进一步添加更多的if。然后,看着那大段大段的if else,我们蛋疼之余,也会小小的钦佩,当时我是怎么写出这么牛逼的代码的?
- dictionary代替选择类if语句
if本身没有选择的功能,为了实现这点,有的人是这样写的:
if (orderinfo.State == 1)
{
result = "已预定";
}
else if (orderinfo.State == 2)
{
result = "已售出";
}
else if 。。。
或者
result = orderInfo.State == ? "待确认" : orderInfo.State == ? "执行中" : orderInfo.State == ? "已完成" : orderInfo.State == ? "已解除" : "";
既琐碎,可读性也不高,而且效率还低(当然,这种情况数据量一般不大)
如果用dictionary,
public Dictionary<int, string> OrderStatedDictionary = new Dictionary<int, string>()
{
{, ""},
{, "已预订"},
{, "已售出"},
{, "待确认"},
};
调用的时候,用OrderStatedDictionary[]的方式,这样无疑代码会美观很多。
- 避免if的多层嵌套
两段代码比较
public string GetNowState(int p1, int p2 , int p3)
{
if (CheckMethod1(p1))
{
if (CheckMethod2(p2))
{
if (CheckMethod3(p3)))
{
return GetResult1();
}
}
}
return "";
}
public string GetNowState(int p1, int p2, int p3)
{
if (!CheckMethod1(p1))
{
return "";
}
if (!CheckMethod2(p2))
{
return "";
}
if (CheckMethod3(p3)) )
{
return GetResult1();
}
return "";
}
}
前者有三层的if嵌套,而后者的逻辑着完全是一条线串下来,代码量少无所谓,但一旦行数超过50行了,哪种代码更容易看不用多说。
- 待续。。。。
哎~! 本来我总结了很多的,只是前段时间太忙,一直没时间写, 现在刚从上家公司辞职,还要过几天才去新公司报道,才有时间写点东西,结果居然一时想不起来了,只记得这两点了,以后再补充。
也欢迎大家把自己的总结贴一下。
最新文章
- Color Transfer between Images code实现
- Javascript获取URL参数值
- [CF676C]Vasya and String(尺取法,原题)
- MyBatis(3.2.3) - Multiple results as a map
- 常用SQL Server分页方式
- OpenSSL命令---req
- [置顶] java Gui 键盘监听事件
- JSON.stringify 语法解释
- 【Java基础】 Java动态代理机制
- 浅谈layer.open的弹出层中的富文本编辑器为何不起作用!
- RabbitMQ学习笔记(五) Topic
- LeetCode 7最长公共前缀
- vuex2.0+两个小例子
- C#实体对象序列化成Json,并让字段的首字母小写
- Python min() 函数
- HyperLogLog in Practice: Algorithmic Engineering of a State of The Art Cardinality Estimation Algorithm
- 11.Git分支管理
- 【BZOJ4200】【NOI2015】小园丁与老司机(动态规划,网络流)
- webpack.dev.conf.js详解
- Django创建一个简单的blog
热门文章
- 学习ASP.NET Core, 怎能不了解请求处理管道[6]: 管道是如何随着WebHost的开启被构建出来的?
- TortoiseGit 文件比对工具使用 Beyond Compare 和 DiffMerge
- $ORACLE_HOME变量值末尾多“/”惹的祸
- Spring之初体验
- 在vim中使用查找命令查找指定字符串
- java使用websocket,并且获取HttpSession,源码分析
- [原] KVM虚拟机网络闪断分析
- RSA非对称加密,使用OpenSSL生成证书,iOS加密,java解密
- 代码的坏味道(16)——纯稚的数据类(Data Class)
- SSIS 包部署 Package Store 后,在 IS 中可以执行,AGENT 执行却报错