使用Pitcher简化卫语句
什么是卫语句
在方法的开头,我们经常会添加一些检查代码,当检查条件为true
时立刻从方法中返回。
这样的单独检查代码被称为“卫语句”。
例如,我们在添加用户时会检查用户名不能为空,年龄必须大于0:
public void AddUser(string name, int age)
{if (string.IsNullOrWhiteSpace(name)){throw new ArgumentException("用户名不能为空!", nameof(name));}if (age<=0){throw new ArgumentOutOfRangeException(nameof(age), "年龄必须大于0!");}//正常业务逻辑...
}
卫语句可以把我们的视线从异常处理中解放出来,集中精力到实现正常业务逻辑代码中。
Pitcher
但是,当这些检查代码过多时,会让代码显得杂乱无章,可读性较低。
这时,可以使用nuget包Pitcher
来帮助我们优化代码。
根据条件抛出异常
示例代码如下:
public void AddUser(string name, int age)
{Throw.When(string.IsNullOrWhiteSpace(name), new ArgumentNullException(nameof(name)));Throw.When(age <= 0, new ArgumentOutOfRangeException(nameof(age)));//正常业务逻辑...
}
简化参数检查
对于ArgumentNullException
和ArgumentOutOfRangeException
,可以使用更简化的方法。
示例代码如下:
Throw.ArgumentNull.WhenNullOrWhiteSpace(name, nameof(name));
Throw.ArgumentOutOfRange.WhenNegativeNumber(age, nameof(age));
泛型异常
对于没有参数的异常或者不关心参数的情况,可以使用Throw<T>
。
示例代码如下:
Throw<InvalidOperationException>.When(age <= 0);
结论
使用Pitcher,可以让卫语句更简单易读。
如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我
使用Pitcher简化卫语句相关推荐
- 使用自定义卫语句写出更简洁的代码
前言 上次,我们介绍了Pitcher,可以帮我们简化卫语句: public User(string name, int age) {Throw.When(string.IsNullOrWhiteSpa ...
- .NET 6新特性试用 | ArgumentNullException卫语句
前言 在前面的文章中(<可空引用类型>),我们介绍过编译器会帮我们检查空引用,但是仅仅是警告.最好的方式还是在运行时用卫语句进行检查: private void Test(WeatherF ...
- 写通俗易懂代码-用卫语句替代嵌套条件表达式
问题: 当我们在写业务逻辑时候,不知不觉已经把代码嵌套了好几次: if (true){if (true){if (true){for (){if (true){业务代码}}}}} 在有比较复杂的判断和 ...
- 【详解】什么是卫语句?作用是什么?
1.什么是卫语句 卫语句就是把复杂的条件表达式拆分成多个条件表达式,减少嵌套.嵌套了好几层的if - then-else语句,转换为多个if语句,实现它的逻辑,这多条的if语句就是卫语句. 卫语句将某 ...
- java版本身份证号码校验与卫语句
最近在公司做项目时,有一个小功能点就是身份证号码校验,即判断是否是合理的身份证号码.不想重复造轮子,想着公司的一些基础组件可能有这个功能,一找还真有,原作者代码逻辑应该是正确的,但是风格有点呵呵了,各 ...
- java - 策略模式、状态模式、卫语句,避免多重if-else(转)
前言 当代码中出现多重if-else语句或者switch语句时.弊端之一:如果这样的代码出现在多处,那么一旦出现需求变更,就需要把所有地方的if-else或者switch代码进行更改,要是遗漏了某一处 ...
- else 策略模式去掉if_如何用卫语句、策略模式、状态模式重构if-else语句
<java开发手册>中: 况且日常开发时遇到一推的if-else着实让人头疼! so,现在开始改造 一.卫语句 卫语句就是把复杂的条件表达式拆分成多个条件表达式,即代码逻辑先考虑失败.异常 ...
- Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)
函数中的条件逻辑使人难以看清正常的执行路径 double getPayAmount() {double result;if (isDead) {result = deadAmount();} else ...
- 如何以卫语句取代嵌套条件表达式
本文分享自华为云社区<以卫语句取代嵌套条件表达式 (Replace Nested Conditional with Guard Clauses)>,作者:JavaEdge. 动机 条件表达 ...
最新文章
- linux设备驱动第一篇:设备驱动程序简介
- 电脑启动后,没有桌面
- 易百教程人工智能python修正-人工智能无监督学习(聚类)
- 学习笔记100—强制免费下载 百度文库等网站上文档 以及客道巴巴文档 教程
- EL之RF(随机性的Bagging+DTR):利用随机选择属性的bagging方法解决回归(对多变量的数据集+实数值评分预测)问题
- String的内存模型,为什么String被设计成不可变的
- linux下安装配置DHCP服务器
- sublime快捷键代码对齐_Python配置sublime运行环境
- Django 学习笔记第一课
- HBase-存储-HFile格式
- Linux 火焰图(on-cpu , off-cpu , memory)
- 【编程开发】之国际号码校验工具 Libphonenumber
- 如何下载四川省卫星地图高清版大图
- 云端软件关闭的原因是什么?
- 他山之石——VBA SQL基础
- 国内外开源sns源码大全
- Android Studio开发中的各种开源API
- matlab钢琴音教程,手把手教你钢琴基本指法(有图有真相,通俗易懂,钢琴入门必备)...
- 戴尔计算机管理界面在哪里,戴尔 win10系统控制面板如何打开?
- 五步移相法matlab程序_用MATLAB软件对逆变电路移相调压进行仿真,30°,60°,90°的波形,并用分段分析法分析其原理_学小易找答案...
热门文章
- 【转载】ESFramewor使用技巧(2)-- 在插件中使用NHibernate
- 系出名门Android(7) - 控件(View)之ZoomControls, Include, VideoView, WebView, RatingBar, Tab
- 11月22日北京.net俱乐部活动ppt下载以及11月19日微软西格玛IE8开发讲座ppt下载
- 机器人出魔切还是三相_英雄联盟:辅助也要去上单,机器人布里茨玩法介绍
- python3.7 安装cx_Freeze
- 谈一谈synchronized关键词
- cocos2d-x知识总结
- SVN安装和使用总结
- POJ 1850 Code(组合数学)
- 忙碌的三月,小感慨下~