美文网首页
《每天一点Java知识》Java基础知识——条件

《每天一点Java知识》Java基础知识——条件

作者: KaelQ | 来源:发表于2017-12-09 11:27 被阅读53次

当我们讨论完了Java的变量常量,便要开始讨论语句了,顺序语句自然不用介绍,那么先从条件语句开始介绍吧

IF-ELSE

  • 简单的IF
    if(条件判断){
      条件为true时执行的语句
    }
    
  • 有点复杂的IF-ELSE
    if(条件判断){
      条件为true时执行的语句
    }else{
      条件为false时执行的语句
    }
    
  • 更复杂的IF-ELSE IF-ELSE
    if(条件判断){
      条件为true时执行的语句
    }else if(条件判断2){
      条件2为true时执行的语句
    }else{
      条件2为false时执行的语句
    }
    

三目运算符

  • 针对这种复杂的IF-ELSE结构,有一种简便的运算方法,即三目运算符。a条件判断?true则a=c:false则有a=d,举个🌰。
    a>0:1:2;
    
    当a大于0的时候a=1,否则a=2,这样子是不是方便了很多呢。

Swtich

  • Switch case结构能够清晰的展示所有条件,但是case后只能跟常量,不能对变量进行判定。
    switch(){
      case 1:
      case 2:
    }
    

简化复杂的IF-ELSE判断

  • 条件表达式通常有两种表现形式。第一种:所有分支都是属于正常行为。第二种:条件表达式提供的答案只有一种是正常行为,其他都是不常见的情况。
    第一种,需要使用if-else。
    第二种,不常见的情况,单独检查该条件。

    if(isDead){
    }else if(isStart){
    }else if(isEnd){
    }
    

    上方代码可以转为

    if(isDead){}
    if(isStart){}
    if(isEnd){}
    
  • 在条件表达式的每个分支上有着相同的一段逻辑代码。

    if(isSpecial){
      total=price*2;
      send();
    }else {
      total=price*3;
      send();
    }
    

    上述代码可以转化为:

    if(isSpecial){
      total=price*2;
    }else {
      total=price*3;
    }
    send();
    
  • 如果分支逻辑过于复杂,可以将逻辑抽取出来作为一个方法,这样更加清晰一些。

    if(isStart){
      a=a*b*c;
      a=a*d;
    }else{
      a=a+b+c;
      a=a+d;
    }
    

    可以优化成

    if(isStart){
      multi();
    }else{
      add();
    }
    public void multi(){
      a=a*b*c;
      a=a*d;
    }
    public void add(){
      a=a+b+c;
      a=a+d;
    }
    
  • 合并条件表达式,如果有一系列的判断条件,得到相同的结果,那么可以将这些条件嵌套成一个条件表达式,甚至可以将合并的表达式抽取出一个独立的函数。

    if(isStarted){
      return 0;
    }else if(isEnded){
      return 0;
    }else if(isNoted){
      return 0;
    }
    

    第一次优化,将结果相同的条件优化成一个条件表达式

    if(isStarted||isEnded||isNoted){
      return 0;
    }
    

    第二次优化,将条件表达式抽出一个函数

    if(isMore()){
      return 0;
    }
    public boolean isMore(){
      return isStarted||isEnded||isNoted;
    }
    
  • 去除Else的方法

    • 如果程序中只有一个else,使用return 来处理

      if(con){
        doOne();
      }else{
        doTwo();
      }
      

      使用return 拒绝else

      if(con){
        doOne();
        return;
      }
      doTwo();
      

      或者直接使用三元运算符:con?doOne():doTwo();

    • 如果程序中有多个else ,可以使用策略模式来替换。

      if(con){
        doThing1();
        }else if(con2){
        doThing2();
      }else if(con3){
        doThing3();
      }
      

      使用策略模式或者多态来拒绝else。关于策略模式可以看《每天一点Java知识》设计模式——策略模式
      举个🌰:

      public Class Context{
        Con con;
        public void Context(Con con){
         this.con=con; 
       }
       public void doThing(){
         con.doThing();
       }
      }
      public interface Con{
       public void doThing();
      }
      public Class Con1{
       public void doThing(){
         doThing1();
       }
      }
      public Class Con2{
       public void doThing(){
         doThing2();
       }
      }
      public Class Con3{
       public void doThing(){
         doThing3();
       }
      }
      

相关文章

网友评论

      本文标题:《每天一点Java知识》Java基础知识——条件

      本文链接:https://www.haomeiwen.com/subject/dwhkixtx.html