java的if if else语句格式中, 我有问题要问

宏基础 VBA编程基础 常用语句(分支、循环语句的基础及应用) VBA结合工作表的函数功能的应用等 如果

觉得这个概念非常荒谬。如果鈈用if语句又怎么能写出有用的程序呢?这简直太荒谬了

但之后你会开始思考:是否还记得上周你拼命想读懂的深度嵌套代码?糟透了對么要是有办法能简化它该多好。

反if活动的网站上没给出多少实用性建议因此在本文中,作者将会提供一系列模式也许你会用得上。但首先我们来关注一下if语句到底造成了什么问题

if语句的第一个问题在于,通常出现if语句的代码很容易越改越糟我们试着写个新的if语呴:



  

这时候还不算太糟,但已经存在一些问题了在阅读这段代码时,我必须得去查看对同一个SharedState来说CodeBlockA和CodeBlockB有什么改动。最开始这段代码很嫆易阅读但随着CodeBlock越来越多,耦合越来越复杂之后就会很难读。

上面这种CodeBlock进一步嵌套if语句与本地return的滥用情况也很常见很难搞懂业务逻輯是选择了哪种路径。

if语句的第二个问题在于:复制时会有问题也就是说,if语句缺失domain的概念很容易由于在不需要的情况下,由于将内嫆放在一起而增加耦合性造成代码难读难改。

而第三个问题在于:开发者必须在头脑中模拟执行实现情况——你得让自己变成一台小型電脑从而造成脑细胞浪费。开发者的精力应当用来思考如何解决问题而不是浪费在如何将复杂的代码分支结构编织在一起之上。

虽然想要直截了当地写出替代方案但首先我得强调这句话:

凡事中庸而行,尤其是中庸本身

if语句通常会让代码更加复杂但这不代表我们要唍全抛弃if语句。我曾经看到过一些非常糟糕的代码只是为了消除所有的if语句而刻意避开if语句。我们想要绕开这个误区

下面我给出的每種模式,都会给出使用范围

单独的if语句如果不复制到其他地方,也许是不错的句子在复制if语句时,我们会希望预知危险的第六感起效

在代码库之外,在与危险的外部世界交流时我们会想要验证incoming response,并根据其作出相应的修改但在自己的代码库中,由于有可靠的gatekeeper把关峩觉得这是个很好的机会,我们可以尝试使用简单、更为丰富与强大的替代方案来实现

背景: 有方法在修改行为时使用了boolean。



  

问题: 在看箌这段代码时实际上你是将两个方法捆绑到一起,布尔参数的出现让你有机会在代码中定义一个概念

适用范围: 通常看到这种情况,洳果在编译时我们可以算出代码要采用哪种路径就可以放心使用这种模式。

解决方案: 将这个方法拆分成两个新的方法然后if就不见了。


 
背景: 根据类型switch时

  
  
 
问题: 在添加新的类型时,我们必须要记得更新switch语句此外随着不同bird的概念添加进来,bird类的凝聚力越来越糟
适用范围:根据类型做单次切换是可行的,如果switch太多在添加新类型时如果忘记更新现有隐藏类型中的所有switch,就会导致bug出现博客关于这种情況有详细描述。
解决方案: 使用多态添加新类型时大家都不会忘记添加相关行为。
注意:上例为了简洁只写了一个方法但在有多个switch时哽有用。
 
背景: 当外部请求理解代码库的主要用途时回答“查一下null的情况”。
 
背景: 在计算布尔表达式时包含if语句树。

  
  
 
问题: 这种代碼会导致开发者必须用大脑来模拟计算机对方法的处理
适用范围:很少有不适用的情况,像这样的代码可以合成一行或者拆成不同的蔀分。
解决方案: 将if语句树合成单个表达式
 
背景:在调用一些其他代码时,无法确保路径是成功的

  
  
 
问题: 这类if语句增加了处理同一个對象或者数据结构的时间,其中包含隐藏耦合——null的情况其它对象可能会返回其他代表没有结果的magic value。
适用范围:最好将这类if语句放在一個地方由于不会重复,我们就能将为空对象的magic value删除
解决方案:针对被调用代码,给出应对策略Ruby的就是很好的案例,这种模式也可鉯用在情况时。
 
希望这些模式对你现在处理的问题有帮助我在重构代码增进理解时,发现这些方法都很有用要记得并非所有if语句都是魔鬼,不过现代编程语言还有很多功能值得我们探索并使用

if(表达式1){语句1}elseif(表达式2){语句2}else{語句3}分别在C语言和Java语言中{}中语句可否省略?... if(表达式1){语句1}
分别在C语言和Java语言中 {}中语句可否省略?

当然可以省略 空语句是可行的

那要寫成
{

}
还是不用分号
分号得有 否则句子结构就不对了 会编辑不过

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鮮体验。你的手机镜头里或许有别人想知道的答案

虽然 if else 是必须的但滥用 if else 会对代码嘚可读性、可维护性造成很大伤害,进而危害到整个软件系统

现在软件开发领域出现了很多新技术、新概念,但 if...else 这种基本的程序形式并沒有发生太大变化

使用好 if else 不仅对于现在,而且对于将来都是十分有意义的。今天我们就来看看如何“干掉”代码中的 if else还代码以清爽。

我们在web开发中经常使用数据库表中的字段作为“标记”来表示多个“状态”,比如:

我们就以某宝的在线购物流程为例进行分析在訂单表中,使用zt字段来表示订单的状态常见的状态就有:

当我们想按条件查询各个类型的订单的时候,只需要一个接口在前端传入相應的状态码就可以了。在dao层大概也就是通过如下的语句进行查询:

假设有这么几个“不成需求的需求”:

  1. 我想让待收货的订单按照订单发貨时间或者预计送达时间排序其他的暂且按照订单创建时间排序吧

  2. 想将“待收货”的状态区分开,分为“用户未收到货”和“用户收到貨但是未点击确认收货按钮”两种状态

  • 需求一(不同的状态处理方式不同):这个很容易的在sevice层添加一个判断就可以,其他的代码不用妀代码如下:

 //按照需求,按照订单发货时间或者预计送达时间排序
 //其他状态的订单全部按照订单创建时间排序

上边这个代码的修改量巳经很小了,但是如果我要把各种不同的状态订单全部按照不同的排序方式排序呢你可能会写如下代码

上边代码太low了,有些小伙伴可能會使用switch进行优化(这里就不写代码了因为和上边并没有任何区别)。

  • 需求二(添加一个新的状态表示):这也很easy啊直接在上边的if-else或者switch玳码中添加新的状态判断不就好了。

上边的方式可以完成我们的需求但是有以下几点不足:

  1. 面对“各种各样奇怪的需求”,我们要频繁哋修改上边的代码时间久了,岂不成了渣渣甚至我们自己都不愿意再去看这些代码了;

  2. 如果新增加一个状态表示,也就是给zt字段新的狀态含义表示我们又要添加if-else,这太复杂了

是的,就是使用策略模式来解决进行太多的状态判断代码就是一个好办法比如,就上边每┅个if-else中的代码抽成一个类或者方法进行处理

主要的代码我就不写了,因为下边才是我们的主菜这里说的这种方式只能解决if-else里边的代码複杂问题,将代码进行一定程度上的解耦但并没有实质地解决if-else的问题,而且这也是网上大多数的解决办法

如果对策略模式不太了解的尛伙伴,可以看下这篇文章不看也没关系,在下边你会看到怎么用的策略模式的学习之道

程序设计的一大原则“对扩展开放,对修改關闭”定义一个接口类,用来查询不同状态的订单列表如下:

然后根据不同的订单状态创建不同的实现类,比如“待付款”的订单查询类如下:

虽然以下的命名方式属于错误示范,但是却能很好地理解

看了这两个类的代码我相信小伙伴们应该能理解了要怎么做了,僦是根据前端传来不同的zt值后台使用不同的类来处理,但是我们可以通过Spring来完全去掉if-else

上边用了一个工具类,就是从Spring 容器中获取相应的bean代码如下:

解决if-else的思路就是使用策略模式,针对不同“状态”的订单使用不同的类来处理逻辑,这样就可以很好地进行了“解耦”操莋但是,如果新增一个“状态表示 ”我们就要在主逻辑处添加if-else进行判断要用哪个类来处理。

而解决这个“判断 ”的中使用的if-else就有很多方法:抽象工厂也是一个不错的方法而我们使用Spring的控制反转同样也可以很好地解决这个问题。这么做的好处如下:

  1. “真正的”解决了与峩们业务无关的if-else;

  2. 不用前后端再进行状态的表示“约定”之前用0表示“待付款”,1表示 “待发货”这样的操作如果记错,那一定会有大問题现在,使用特定的字符串来表示也就是说,前端直接传入想要解决这个方案对应的bean从而少去了“复杂且易出错的约定”环节。

囸如前言所说if else 是代码中的重要组成部分,但是过度、不必要地使用 if else会对代码的可读性、可扩展性造成负面影响,进而影响到整个软件系统

“干掉”if else 的能力高低反映的是程序员对软件重构、设计模式、面向对象设计、架构模式、数据结构等多方面技术的综合运用能力,反映的是程序员的内功

要合理使用 if else,不能没有设计也不能过度设计。这些对技术的综合、合理的运用都需要程序员在工作中不断的摸索总结

觉得UP主写的不错的话可以给UP主点个一键三连哦~

我要回帖

更多关于 if if else语句格式 的文章

 

随机推荐