什么是卫语句

在方法的开头,我们经常会添加一些检查代码,当检查条件为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)));//正常业务逻辑...
}

简化参数检查

对于ArgumentNullExceptionArgumentOutOfRangeException,可以使用更简化的方法。

示例代码如下:

Throw.ArgumentNull.WhenNullOrWhiteSpace(name, nameof(name));
Throw.ArgumentOutOfRange.WhenNegativeNumber(age, nameof(age));

泛型异常

对于没有参数的异常或者不关心参数的情况,可以使用Throw<T>

示例代码如下:

Throw<InvalidOperationException>.When(age <= 0);

结论

使用Pitcher,可以让卫语句更简单易读。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我

使用Pitcher简化卫语句相关推荐

  1. 使用自定义卫语句写出更简洁的代码

    前言 上次,我们介绍了Pitcher,可以帮我们简化卫语句: public User(string name, int age) {Throw.When(string.IsNullOrWhiteSpa ...

  2. .NET 6新特性试用 | ArgumentNullException卫语句

    前言 在前面的文章中(<可空引用类型>),我们介绍过编译器会帮我们检查空引用,但是仅仅是警告.最好的方式还是在运行时用卫语句进行检查: private void Test(WeatherF ...

  3. 写通俗易懂代码-用卫语句替代嵌套条件表达式

    问题: 当我们在写业务逻辑时候,不知不觉已经把代码嵌套了好几次: if (true){if (true){if (true){for (){if (true){业务代码}}}}} 在有比较复杂的判断和 ...

  4. 【详解】什么是卫语句?作用是什么?

    1.什么是卫语句 卫语句就是把复杂的条件表达式拆分成多个条件表达式,减少嵌套.嵌套了好几层的if - then-else语句,转换为多个if语句,实现它的逻辑,这多条的if语句就是卫语句. 卫语句将某 ...

  5. java版本身份证号码校验与卫语句

    最近在公司做项目时,有一个小功能点就是身份证号码校验,即判断是否是合理的身份证号码.不想重复造轮子,想着公司的一些基础组件可能有这个功能,一找还真有,原作者代码逻辑应该是正确的,但是风格有点呵呵了,各 ...

  6. java - 策略模式、状态模式、卫语句,避免多重if-else(转)

    前言 当代码中出现多重if-else语句或者switch语句时.弊端之一:如果这样的代码出现在多处,那么一旦出现需求变更,就需要把所有地方的if-else或者switch代码进行更改,要是遗漏了某一处 ...

  7. else 策略模式去掉if_如何用卫语句、策略模式、状态模式重构if-else语句

    <java开发手册>中: 况且日常开发时遇到一推的if-else着实让人头疼! so,现在开始改造 一.卫语句 卫语句就是把复杂的条件表达式拆分成多个条件表达式,即代码逻辑先考虑失败.异常 ...

  8. Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)

    函数中的条件逻辑使人难以看清正常的执行路径 double getPayAmount() {double result;if (isDead) {result = deadAmount();} else ...

  9. 如何以卫语句取代嵌套条件表达式

    本文分享自华为云社区<以卫语句取代嵌套条件表达式 (Replace Nested Conditional with Guard Clauses)>,作者:JavaEdge. 动机 条件表达 ...

最新文章

  1. linux设备驱动第一篇:设备驱动程序简介
  2. 电脑启动后,没有桌面
  3. 易百教程人工智能python修正-人工智能无监督学习(聚类)
  4. 学习笔记100—强制免费下载 百度文库等网站上文档 以及客道巴巴文档 教程
  5. EL之RF(随机性的Bagging+DTR):利用随机选择属性的bagging方法解决回归(对多变量的数据集+实数值评分预测)问题
  6. String的内存模型,为什么String被设计成不可变的
  7. linux下安装配置DHCP服务器
  8. sublime快捷键代码对齐_Python配置sublime运行环境
  9. Django 学习笔记第一课
  10. HBase-存储-HFile格式
  11. Linux 火焰图(on-cpu , off-cpu , memory)
  12. 【编程开发】之国际号码校验工具 Libphonenumber
  13. 如何下载四川省卫星地图高清版大图
  14. 云端软件关闭的原因是什么?
  15. 他山之石——VBA SQL基础
  16. 国内外开源sns源码大全
  17. Android Studio开发中的各种开源API
  18. matlab钢琴音教程,手把手教你钢琴基本指法(有图有真相,通俗易懂,钢琴入门必备)...
  19. 戴尔计算机管理界面在哪里,戴尔 win10系统控制面板如何打开?
  20. 五步移相法matlab程序_用MATLAB软件对逆变电路移相调压进行仿真,30°,60°,90°的波形,并用分段分析法分析其原理_学小易找答案...

热门文章

  1. 【转载】ESFramewor使用技巧(2)-- 在插件中使用NHibernate
  2. 系出名门Android(7) - 控件(View)之ZoomControls, Include, VideoView, WebView, RatingBar, Tab
  3. 11月22日北京.net俱乐部活动ppt下载以及11月19日微软西格玛IE8开发讲座ppt下载
  4. 机器人出魔切还是三相_英雄联盟:辅助也要去上单,机器人布里茨玩法介绍
  5. python3.7 安装cx_Freeze
  6. 谈一谈synchronized关键词
  7. cocos2d-x知识总结
  8. SVN安装和使用总结
  9. POJ 1850 Code(组合数学)
  10. 忙碌的三月,小感慨下~