精华内容
下载资源
问答
  • if语句与if else if else语句与if else语句与if if if语句

    万次阅读 多人点赞 2019-10-12 13:27:10
    首先我们来看前三者的使用...2. if elseif(某个条件) 语句1; else 语句2; 使用场景: 当满足这个条件时,执行某个操作,当不满足这个条件时,执行另一个操作(和if型区别是如果不满足条件一个执行另一个操作,而一...

    首先我们来看前三者的使用区别

    1. if型

    结构是:

    if(某个条件)
    	语句;
    

    使用场景:
    当满足这个条件时,执行某个操作,而不满足该条件时,什么都不做.在这种情况下就可以使用这种结构

    2. if else型

    if(某个条件)
    	语句1;
    else
    	语句2;
    

    使用场景:
    当满足这个条件时,执行某个操作,当不满足这个条件时,执行另一个操作(和if型区别是如果不满足条件一个是执行另一个操作,而一个是什么都不做)

    3. if else if else型

    if(条件1)
    	语句1;
    else if(条件2)
    	语句2;
    else if(条件3)
    	语句3;
    	.
    	.
    	.
    else
    	语句4;
    

    1.使用场景:
    这种形式的if语句,最终只有一个出口.即当满足条件1时,执行语句1.当不满足条件1时,往下走,判断是否满足条件2,如果还是不满足,则继续往下走,一直走到else语句,说明之前的条件都不满足,最终执行语句4;
    这个和之前两个的区别是:它存在了多种情况的分析,而之前两个仅仅只有一种情况的分析.

    2.if elseif else 与if 嵌套的区别:
    if套if,是当外面条件不满足时,里面的if不会执行
    而if else if else,是当第一个条件不满足时,判断第二个条件

    最后我们来看看多个if的类型

    if(条件1)
    	语句1;
    if(条件2)
    	语句2;
    if(条件3)
    	语句3;
    

    解释一下:有没有发现特别像if else if else型,但是二者是有区别的.
    分析一下多个if:当满足条件1时,执行语句1.当不满足条件1时,往下走,判断条件2,如果还是不满足,再判断条件3.这么看好像和if else if else型没什么区别.
    我们看个例子就明白了

    多个if:
    
    int a=0;
    if(a==0){
    	a++;
    	printf("aaa");
    }      
    if(a==1)
    	printf("bbb");
    if(a==2)
    	printf("ccc");   
    
    最终输出:aaabbb,在多个if语句中,所有的if都会进行判断,无论是否满足情况.所以在满足a==0,执行了a++,a就变成了1,当进行a==1判断时,也符合,故也执行了printf("bbb")
    -------------------------------------------------
    if else if else:
    
    int a=0;
    if(a==0){
    	a++;
    	printf("aaa");
    }      
    else if(a==1)
    	printf("bbb");
    else
    	printf("ccc");   
    
    最终只输出了aaa.if else if else,只要有一个条件满足,则其余条件不用判断,直接跳过即可,所以a++,a=1之后不会去判断else if中的a==1,所以也就不会执行printf("bbb")
    
    展开全文
  • 项目中的if else太多了,该怎么重构?

    万次阅读 多人点赞 2019-11-09 16:23:09
    介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。...} else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...

    在这里插入图片描述

    介绍

    最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的

    if (msgType = "文本") {
    	// dosomething
    } else if(msgType = "图片") {
    	// doshomething
    } else if(msgType = "视频") {
    	// doshomething
    } else {
    	// doshomething
    }
    

    就是根据消息的不同类型有不同的处理策略,每种消息的处理策略代码都很长,如果都放在这种if else代码快中,代码很难维护也很丑,所以我们一开始就用了策略模式来处理这种情况。

    策略模式还挺简单的,就是定义一个接口,然后有多个实现类,每种实现类封装了一种行为。然后根据条件的不同选择不同的实现类。

    实现过程

    消息对象,当然真实的对象没有这么简单,省略了很多属性

    @Data
    @AllArgsConstructor
    public class MessageInfo {
    
        // 消息类型
        private Integer type;
        // 消息内容
        private String content;
    
    }
    

    定义一个消息处理接口

    public interface MessageService {
    
        void handleMessage(MessageInfo messageInfo);
    }
    

    有2个消息处理接口,分别处理不同的消息

    处理文本消息

    @Service
    @MsgTypeHandler(value = MSG_TYPE.TEXT)
    public class TextMessageService implements MessageService {
    
        @Override
        public void handleMessage(MessageInfo messageInfo) {
            System.out.println("处理文本消息 " + messageInfo.getContent());
        }
    }
    

    处理图片消息

    @Service
    @MsgTypeHandler(value = MSG_TYPE.IMAGE)
    public class ImageMessageService implements MessageService {
    
        @Override
        public void handleMessage(MessageInfo messageInfo) {
            System.out.println("处理图片消息 " + messageInfo.getContent());
        }
    }
    

    文章写到这,可能大多数人可能会想到要需要如下一个Map, Map<消息类型,消息处理对象>,这样直接根据消息类型就能拿到消息处理对象,调用消息处理对象的方法即可。我们就是这样做的,但是我们不想手动维护这个Map对象,因为每次增加新的消息处理类,Map的初始化过程就得修改

    我们使用了注解+ApplicationListener来保存这种映射关系,来看看怎么做的把

    定义一个消息类型的枚举类

    public enum MSG_TYPE {
    
        TEXT(1, "文本"),
        IMAGE(2, "图片"),
        VIDEO(3, "视频");
    
        public final int code;
        public final String name;
    
        MSG_TYPE(int code, String name) {
            this.code = code;
            this.name = name;
        }
    }
    

    定义一个注解

    @Documented
    @Inherited
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MsgTypeHandler {
    
        MSG_TYPE value();
    }
    

    不知道你注意到了没,前面的代码中,每种消息处理类上面都有一个@MsgTypeHandler注解,表明了这个处理类
    处理哪种类型的消息

    @Service
    @MsgTypeHandler(value = MSG_TYPE.TEXT)
    public class TextMessageService implements MessageService {
    
        @Override
        public void handleMessage(MessageInfo messageInfo) {
            System.out.println("处理文本消息 " + messageInfo.getContent());
        }
    }
    

    用一个context对象保存了消息类型->消息处理对象的映射关系

    @Component
    public class MessageServiceContext {
    
        private final Map<Integer, MessageService> handlerMap = new HashMap<>();
    
        public MessageService getMessageService(Integer type) {
            return handlerMap.get(type);
        }
    
        public void putMessageService(Integer code, MessageService messageService) {
            handlerMap.put(code, messageService);
        }
    
    }
    

    最精彩的部分到了

    @Component
    public class MessageServiceListener implements ApplicationListener<ContextRefreshedEvent> {
    
        @Override
        public void onApplicationEvent(ContextRefreshedEvent event) {
            Map<String, Object> beans = event.getApplicationContext().getBeansWithAnnotation(MsgTypeHandler.class);
            MessageServiceContext messageServiceContext = event.getApplicationContext().getBean(MessageServiceContext.class);
            beans.forEach((name, bean) -> {
                MsgTypeHandler typeHandler = bean.getClass().getAnnotation(MsgTypeHandler.class);
                messageServiceContext.putMessageService(typeHandler.value().code, (MessageService) bean);
            });
        }
    }
    

    在spring的启动过程中,通过解析注解,将消息类型->消息处理对象的映射关系保存到MessageServiceContext对象中

    @Autowired
    MessageServiceContext messageServiceContext;
    
    @Test
    public void contextLoads() {
    	// 构建一个文本消息
    	MessageInfo messageInfo = new MessageInfo(MSG_TYPE.TEXT.code, "消息内容");
    	MessageService messageService = messageServiceContext.getMessageService(messageInfo.getType());
    	// 处理文本消息 消息内容
    	// 可以看到文本消息被文本处理类所处理
    	messageService.handleMessage(messageInfo);
    }
    

    测试类正常工作,通过策略模式避免了写大量的if else代码,也更容易维护

    欢迎关注

    在这里插入图片描述

    参考博客

    [1]https://juejin.im/post/5c5172d15188256a2334a15d

    展开全文
  • awk if else if else

    万次阅读 多人点赞 2017-02-14 09:36:12
    awk 功能强大,可以处理...在网上查了好久,在shell使用awk 的 if else if else 时,网上给的列子是这样的:awk '{if ($1==1) print "A" else if ($1==2) print "B" else print "C"}'尝试了好久也不对,找不到哪儿的错

    awk 功能强大,可以处理文本,筛选需要的信息,这里不再多说,有兴趣的可以上网搜,我在这里只讲awk 怎样使用if else。
    在网上查了好久,在shell使用awk 的 if else if else 时,网上给的列子是这样的:

    awk '{if ($1==1) print "A" else if ($1==2) print "B" else print "C"}'

    尝试了好久也不对,找不到哪儿的错误,后来听大神讲到,每个语句后面都有分号,正确的应该是这样的

    awk '{if ($1==1) print "A"; else if ($1==2) print "B"; else print "C"}'
    展开全文
  • freemarker中的if elseif else语句

    千次阅读 2019-01-16 19:27:16
    freemarker中的if elseif else语句
                   

    freemarker中的if...elseif...else语句


    1、设计示例

    <#if student.studentAge lt 12>   ${student.studentName}不是一个初中生<#elseif student.studentAge lt 15>   ${student.studentName}不是一个高中生<#elseif student.studentAge lt 18>   ${student.studentName}不是一个大学生<#else>   ${student.studentName}是一个大学生</#if>


    2、运行结果

    student.studentAge为20,student.studentName为张三丰

     张三丰是一个大学生




               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • if,if else,else if的区别,以js为例

    万次阅读 多人点赞 2019-02-25 14:03:05
    if,if else,else if的区别,以js为例
  • if , if else , if else if , if的嵌套

    千次阅读 2016-03-17 17:25:31
    如果表达示成立,执行括号中的语句,不成立则不执行if else if(表达示) { 语句1 } else{ 语句2 } 如果表达示成立执行语句1,不成立执行语句2 if else if if(表达示1) {
  • 9个小技巧让你的 if else看起来更优雅

    万次阅读 多人点赞 2020-07-03 14:02:14
    9个小技巧让你的 if else看起来更优雅 if else 是我们写代码时,使用频率最高的关键词之一,然而有时过多的 if else 会让我们感到脑壳疼,例如下面这个伪代码: 是不是很奔溃?虽然他是伪代码,并且看起来也很夸张...
  • if;if else;if else if 循环结构的用法

    千次阅读 2017-07-13 20:34:43
    if else;if else if 循环结构的用法之前,回顾今天所学: 流程控制语句定义:是用来控制程序各语句执行顺序的语句;其分类为:1.顺序结构 2.分支(选择)结构 3. 循环结构。 顺序结构:if ------(分支结构):形式...
  • ---------------------- ASP.Net+Android+IO开发S、.Net培训...if else if elseif if if连用的区别 前段时间写了一段代码, 此代码是获取一个二维数组,并分行打印数组 运行结果为: 如果把以上用于
  • Python if else elif

    千次阅读 2020-07-14 20:04:52
    Python if else and elif are keywords for conditional logic in the program. In this tutorial we are going to learn about python if, else and elif. Previously we learned about Python Operators and Prece...
  • python中 ifif elseif elif 的使用

    千次阅读 2020-02-02 10:18:18
    python中 ifif elseif elif else 判断 的使用 python中ifif else 和其他语言的用法一样,我们就不在详细介绍了,重点讲一下if elif 这条新语句 if语句使用方法 python中if的使用方法与其他编程语言中的 if ...
  • Java8 IF ELSE IF 优化

    千次阅读 2020-07-04 13:41:06
    Java8 IF ELSE IF 优化现象解决方式if else ifswitch case弊端Java8的实现 现象 在程序中总会看到或者碰到很多根据key判断要执行的方法代码等等, ![流程示意图]...
  • thymeleaf if elseif 多条件判断

    万次阅读 2019-01-03 09:46:14
    如果要实现if else if else 判断表达式,在thymeleaf要使用th:switch代替,th:case="*"表示默认,需写在最后 &lt;div class="top" th:switch="${area}"&gt; &lt;div ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 342,971
精华内容 137,188
关键字:

ifelse