如果条件语句极其复杂,就应该将条件语句拆解开,然后逐个检查,并在条件为真时立刻从函数中返回,这样的单独检查通常被称之为“卫语句”(guard clauses)

《重构---改善既有代码的设计》

在阿里巴巴 Java 规范里也写到 “多层条件语句建议使用卫语句、策略模式、状态模式等方式重构。”

那么到底什么是卫语句

是否遇到(敲)过这样的代码,就像下面这种 “横放着的金字塔”:

if(true){if(true){if(true){if(true){if(true){if(true){}}}}}}

实战演示一下吧

如题 : 从一百万里面找到所有能同时被 3 5 7 9 11 整除的数字

那么我们会不会这样写,举个小栗子,相信你遇到过
/**
* 从一百万里面找到所有能同时被 3 5 7 9 11 整除的数字
*/
for (int i = 0; i < 10000; i++) {if (i%3==0){if (i%5==0){if (i%7==0){if (i%9==0){if (i%11==0){System.out.println(i);}}}}}
}

那么卫语句改写后就是,如下

发现没有,这样写会优雅很多,无论在阅读还是运行上都是上上选
/**
* 从一百万里面找到所有能同时被 3 5 7 9 11 整除的数字
*/
for (int i = 0; i < 10000; i++) {if (i%3!=0){continue;}if (i%5!=0){continue;}if (i%7!=0){continue;}if (i%9!=0){continue;}if (i%11==0){System.out.println(i);}
}

java中卫语句详解相关推荐

  1. Java教程:Java continue语句详解

    Java教程有时强迫一个循环提早反复是有用的,也就是,你可能想要继续运行循环,但是要忽略这次重复剩余的循环体的语句,所以 Java 提供了 continue 语句.continue 语句是 break ...

  2. Java continue语句详解

    有时强迫一个循环提早反复是有用的,也就是,你可能想要继续运行循环,但是要忽略这次重复剩余的循环体的语句,所以 Java 提供了 continue 语句.continue 语句是 break 语句的补充 ...

  3. Java快速入门到精通— Java break语句详解

    所有流行的编程语言中都有循环语句.JAVA 中采用的循环语句与C语言中的循环语句相似,主要有 while.do-while 和 for! 那么在某些时候需要在某种条件出现时强行终止循环,而不是等到循环 ...

  4. Java break语句详解

    在 Java 中,break 语句有 3 种作用,分别是:在 switch 语句中终止一个语句序列.使用 break 语句直接强行退出循环和使用 break 语句实现 goto 的功能. 在 swit ...

  5. Java循环语句详解(Java必备知识)

    循环语句就是在满足一定条件的情况下反复执行某一个操作.在Java中提供了4种常用的循环语句,分别是while语句.do-while语句.for语句和foreach语句,其中foreach语句是for语 ...

  6. Java for语句详解

    for 语句是一种在程序执行前就要先判断条件表达式是否为真的循环语句.假如条件表达式的结果为假,那么它的循环语句根本不会执行.for 语句通常使用在知道循环次数的循环中. for 语句语法格式如下所示 ...

  7. 教妹学Java(十四):switch 语句详解

    大家好,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员.本篇文章通过我和三妹对话的形式来谈一谈"switch 语句". 教妹学 Java,没见过这么有趣的标题吧?&q ...

  8. 从零学Java(25)之 break语句详解

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

  9. Java类加载机制详解【java面试题】

    Java类加载机制详解[java面试题] (1)问题分析: Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数 ...

  10. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

最新文章

  1. css3伪元素选择器before 和 after 的使用
  2. Docker的常用管理命令Docker将数据挂载到容器的三种方式
  3. 开发日记:接口开发设计
  4. 省选专练 [SHOI2001]小狗散步
  5. Linux中Docker的介绍、安装与卸载
  6. 折线图笔记 -python
  7. 四川大学计算机网络实验,四川大学计算机网络实验报告
  8. Hi3559A Hi3519A Hi3556A算力对比
  9. 图片分享和加载失败的原因之一
  10. Builder构建者模式,将复杂对象的创建过程与其表示分离,活学活用才是王道
  11. 牛客网刷题java之变态跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
  12. ios 故事版 设定UIImageRenderingMode的方式
  13. 为保护其App Store,苹果不惜拉踩安卓:iOS比Android更安全!
  14. c++中atan2函数_atan2()函数以及C ++中的示例
  15. d3d透视逆向篇:第6课 通过特征码定位D3D函数入口地址
  16. 马斯克成功将特斯拉送上太空,这意味着什么?
  17. Smart License
  18. 【Word】论文参考文献的引用及自动编号
  19. 西门子触摸屏函数翻译_西门子触摸屏的函数全是英文的,看不懂了
  20. 全国计算机等级考试时间查询入口

热门文章

  1. #VSTS日志# Xamarin构建支持和一大波更新
  2. php:两个文件夹递归地比较,没有的文件自动复制过去
  3. Python无限播放励志语句
  4. 基于Cocos2d-x开发guardCarrot--3 《保卫萝卜2》主页面开发(仅使用Cocos2d-x)
  5. Cocos2d-xV3.17.2 win32平台模板源码详注
  6. IPSEC VXN在PPPoE对端配置方案
  7. iOS -- MBProgressHUB
  8. logging日志输出模块
  9. LoadRunner启动自带例子Web Tours报错
  10. 品鉴B500:艺术对技术无乐不作的反击