精华内容
下载资源
问答
  • 读取了一个值,然后需要和四五个常量值比较大小,目前用了五个if分支语句,觉得很丑陋 可以用switch来让代码变漂亮点吗? 求老鸟介绍经验
  • if (Type_Id == 0) { string str1 = ""; } else { string str1 = "and Type_Id=" + Type_Id; } 我在下面引用str1会告诉我没有定义- -用var也不行和javascript不一样啊,求各位大大指点
  • 来自公众号:小生方勤前言最近部门在对以往的代码做一些优化,我在代码中看到一连串的 if(){}elseif(){} 的逻辑判断。这明显是有优化空间的。由于内部代码不适合分享,这里我就用 来讲讲逻辑判断优化的一些方案。...
    点击上方“IT平头哥联盟”,选择“置顶或者星标”

    你的关注意义重大!

    b41679d9e22a48f249fd7c7108c4c2bc.png

    来自公众号:小生方勤

    前言

    最近部门在对以往的代码做一些优化,我在代码中看到一连串的 if(){}elseif(){} 的逻辑判断。这明显是有优化空间的。

    由于内部代码不适合分享,这里我就用 来讲讲逻辑判断优化的一些方案。

    这里先声明,免有人疑惑:

    我们在项目中使用的很可能会有多层的嵌套,不像我的例子只有一层。不过其优化的思想是大致相同的。由于 returnWeekday() 方法异常之简单,所以提前声明。

    需求

    写一个 returnWeekday() 方法返回"今天是星期*"。

    接下来我们就一步一步来。

    优化过程

    这里我简单的分为 “初学 —> 入门 —> 中级” 这几个阶段。

    初学

    当我们开始拿到需求的时候,看到一系列的逻辑判断,首先想到的应该就是 if 语句了。

    代码如下:

    function returnWeekday(){

    letstring= "今天是星期";

    let date = newDate().getDay();

    if(date === 0) {

    string+= "日";

    } elseif(date === 1) {

    string+= "一";

    } elseif(date === 2) {

    string+= "二";

    } elseif(date === 3) {

    string+= "三";

    } elseif(date === 4) {

    string+= "四";

    } elseif(date === 5) {

    string+= "五";

    } elseif(date === 6) {

    string+= "六";

    }

    returnstring

    }

    console.log(returnWeekday())

    当我们写完了这样的代码,第一感觉就是 elseif 块是不是太多了。

    可是当我们还在思考如何优化的时候,产品就在钉钉发消息给你问这个需求完成的怎么样了?还带了一个坏笑的表情包。这个时候你告诉自己,这个优化后面再说吧。可是久而久之,需求加之。这个再也没有优化过了,直到下一个接手。

    上面的代码确实 elseif 块太多了,看着就不舒服。

    我们在看《JavaScript 高级程序设计》的时候,看到这样一句话:

    switch 语句与 if 语句的关系最为密切,而且也是在其他语言中普遍使用的一种流控制语句。

    所以我们是不是可以考虑使用 switch 语句来优化一下呢?

    入门

    这里我们使用 switch 语句优化一遍代码。

    注意:switch 语句在比较值的时候使用的是全等操作符,不会有类型转换的情况。

    代码如下:

    function returnWeekday(){

    letstring= "今天是星期";

    let date = newDate().getDay();

    switch(date) {

    case0:

    string+= "日";

    break;

    case1:

    string+= "一";

    break;

    case2:

    string+= "二";

    break;

    case3:

    string+= "三";

    break;

    case4:

    string+= "四";

    break;

    case5:

    string+= "五";

    break;

    case6:

    string+= "六";

    break;

    }

    returnstring

    }

    console.log(returnWeekday())

    我们在 case 里面拼接字符,以达到输出预期结果的目的。这里的结构看起来确实比 if 语句清晰了一点。可是还是有点疑惑?

    假设哪一天,相关组织发现,星象有变。每周需要变成八天(产品的思维,你无法想象)。我们这个 returnWeekday() 方法就需要多加一层判断了。

    我们的希望是已经封装好的方法,不要频繁的修改。可是需求的变动是你无法控制的。

    所以我们继续思考该怎么优化。

    中级

    我们看到这里的 case 是数字,和数组的下标是一致的。

    即:['天','一','二','三','四','五','六'] 的下标。

    所以我们可以考虑使用数组来优化。

    代码如下:

    function returnWeekday(){

    letstring= "今天是星期";

    let date = newDate().getDay();

    // 使用数组

    let dateArr = ['天','一','二','三','四','五','六'];

    returnstring+ dateArr[date]

    }

    console.log(returnWeekday())

    以上代码是不是比 switch 语句和 if 语句清晰多了。而且就算一周变为八天,只需要修改 dateArr 数组就好了。

    倘若我们的每个 case 是不规律的字符串呢?那我们使用对象,每个 case 为一个 key

    代码如下:

    function returnWeekday(){

    letstring= "今天是星期";

    let date = newDate().getDay();

    // 使用对象

    dateObj = {

    0: '天',

    1: "一",

    2: "二",

    3: "三",

    4: "四",

    5: "五",

    6: "六",

    };

    returnstring+ dateObj[date]

    }

    console.log(returnWeekday())

    以上使用数组或者对象的写法,提高代码的可读性的同时,维护起来也变得简单了。

    使用 charAt 字符方法

    字符串有个和使用数组下标类似的方法:

    // charAt 定位方法

    function returnWeekday(){

    return"今天是星期"+ "日一二三四五六".charAt(newDate().getDay());

    }

    console.log(returnWeekday())

    需求变动

    这个时候,有人希望 returnWeekday() 方法不仅返回今天是周几,还需要区分工作日和休息日,调用相关方法。

    如果是使用 switchif数组 维护起来就有点麻烦,需要改写的地方还挺多的。

    function returnWeekday(){

    letstring= "今天是星期";

    let date = newDate().getDay();

    // 使用对象

    dateObj = {

    0: ['天','休'],

    1: ["一",'工'],

    2: ["二",'工'],

    3: ["三",'工'],

    4: ["四",'工'],

    5: ["五",'工'],

    6: ["六",'休'],

    }

    // 类型,这里也可以对应相关方法

    dayType = {

    '休': function(){

    // some code

    console.log('为休息日')

    },

    '工': function(){

    // some code

    console.log('为工作日')

    }

    }

    let returnData = {

    'string': string+ dateObj[date][0],

    'method': dayType[dateObj[date][1]]

    }

    return returnData

    };

    console.log(returnWeekday().method.call(this))

    其他常见优化手段

    这里在给出一些常见的优化手段。

    三元运算

    适合简单的 if(){}else{} 情况。

    //滚动监听,头部固定

    handleScroll: function() {

    let offsetTop = this.$refs.pride_tab_fixed.getBoundingClientRect().top;

    if( offsetTop < 0){

    this.titleFixed = true

    } else{

    this.titleFixed = false

    }

    // 改成三元

    (offsetTop < 0) ? this.titleFixed = true: this.titleFixed = false;

    // 我们发现条件块里面的赋值情况是布尔值,所以可以更简单

    this.titleFixed = offsetTop < 0;

    }

    这样在精简代码的时候,可读性也没有降低。

    逻辑与运算符

    有些时候我们可以使用逻辑与运算符来简化代码

    if( falg ){

    someMethod()

    }

    可以改成:

    falg && someMethod();

    使用 includes 处理多重条件

    if( code === '202'|| code === '203'|| code === '204'){

    someMethod()

    }

    可以改成

    if( ['202','203','204'].includes(code) ){

    someMethod()

    }

    Vue 相关文章输出计划

    最近总有朋友问我 Vue 相关的问题,因此接下来我会输出 10 篇 Vue 相关的文章,希望对大家有一定的帮助。我会保持在 7 到 10 天更新一篇。

    1. Vuex 注入 Vue 生命周期的过程(完成)

    2. 学习 Vue 源码的必要知识储备(完成)

    3. 浅析 Vue 响应式原理(完成)

    4. 新老 VNode 进行 patch 的过程

    5. 如何开发功能组件并上传 npm

    6. 从这几个方面优化你的 Vue 项目

    7. 从 Vue-Router 设计讲前端路由发展

    8. 在项目中如何正确的使用 Webpack

    9. Vue 服务端渲染

    10. Axios 与 Fetch 该如何选择

    —  —关注公众号「IT平头哥联盟」,一起进步,一起成长!

    bda981ac6c6a9a5f0d0e4c107c089a03.png

    1a061a3e9bc1da3e12014925c38c4315.gif

    鹅厂前端大佬对于前端学习路线的一些建议(内含自测题)

    我的VS Code设置,助你每天少加班1小时

    值得学习的10个Vue开发技巧

    字节跳动实习30天的4点成长感受

    展开全文
  • 我们最常见的就是写 if else if 这种东西对于初学者来说确实是很方便,但是维护起来肯定是一堆得麻烦,下面我们来看看怎么使用enum(1),enum+class.forname(2)来解决这个问题,枚举类的使用可以让代码十分的清晰,...
    1. 前言
      在漫长的编码生涯中,我们最常见的就是写 if else if 这种东西对于初学者来说确实是很方便,但是维护起来肯定是一堆得麻烦,下面我们来看看怎么使用enum(1),enum+class.forname(2)来解决这个问题,枚举类的使用可以让代码十分的清晰,并且极大程度上可以完成解耦的工作,维护起来也非常简单,

    2. 原代码
      需求: A系统的定义的附件类型和B系统的附件类型 不一致,A需要将附件传给B,但是 B系统的附件类型会一直变化,但是 A系统是面对客户的,不可能每次都因为B增加附件而发布一次,所以需要想个办法解决
      初始版本:

      public String convertImgType(String type) throws RequestException {
            String convert; 
            if ("1".equals(type)) {
                convert = "1";// 身份证正
            } else if ("2".equals(type)) {
                convert = "2"; // 身份证反
            } else if ("3".equals(type)) {
                convert = "3";// 本人照片 
            }  else {
                convert = "0";
            }
            return convert;
        }
    

    很明显这样写,是十分愚蠢的,怎么改善呢,经过沟通,以后A B 两个系统会进行一致性的附件类型增加,
    于是我们考虑就用 enum 来解决之前的愚蠢
    首先写一个枚举类:很明显就把这两个type 对应起来就行了

    public enum ImageEnum implements IUnexEnum<ImageEnum>{ 
        TYPE_1("1","1"), 
        TYPE_19("19","0"),
        TYPE_20("21","0"),
        ;  
        ImageEnum(String code, String desc) {  this.code = code;  this.desc = desc;  } 
        private final String code; 
        private final String desc; 
        @Override
        public String code() {   return code;  } 
        @Override
        public String desc() {     return desc;  }
        // 判断code是否相等   @return true-相等, false-不等 
        @Override
        public boolean equals(String code) {   return this.code.equals(code);  } 
    }
    

    抽象的动作 IunexEnum

    public interface IUnexEnum<E extends Enum<?>> {
        String code(); 
        String desc(); 
        boolean equals(String var1);
    }
    

    enum工具类

      public static <E extends Enum<?>> E code2Enum(Class<E> enumClass, String code) {
                if (!IUnexEnum.class.isAssignableFrom(enumClass)) {
                    return null;
                } else {
                    Enum[] var5;
                    int var4 = (var5 = (Enum[])enumClass.getEnumConstants()).length;
                    for(int var3 = 0; var3 < var4; ++var3) {
                        IUnexEnum<?> ce = (IUnexEnum)IUnexEnum.class.cast( var5[var3]);
                        if (ce.equals(code)) {
                            return (E)var5[var3];
                        }
                    } 
                    return null;
                }
            }
    
    1. 初始改造的结果
     public String convertImgType(String type) throws RequestException {
                String convert = "0"; 
                ImageEnum imageEnum = UnexEnumUtil.code2Enum(ImageEnum.class, type);
                if (imageEnum == null) {
                     convert =type;
                }else{
                   convert=imageEnum.desc();
               }
               return convert;  
    
    1. 可能在实践生产中,我们会遇到的还不止 type 转化的问题,还有根据 传入的参数,获取不同的model 所以这里我们也给一个这样的例子 enum+class.forname
      初始版本:一个抽象的 区间类,暂时有四个子类,所以直接用了if else
     public static SectionAb createSections(String sybolend, String sybolStart) {
            boolean endFlag = !Strings.isNullOrEmpty(sybolend)?true:false;
            boolean starFlag = !Strings.isNullOrEmpty(sybolStart)?true:false;
            SectionAb result = null;
            if (endFlag && !starFlag) {
                result = new SectionAbSingleEnd();
            }
            if (endFlag && starFlag) {
                result = new SectionAbBoth();
            }
            if (!endFlag && starFlag) {
                result = new SectionAbSingleStart();
            }
            if (!endFlag && !starFlag) {
                result = new SectionAbNotAll();
            }
            return result;
        }
    

    为了正交性和解耦:其实为了以后不再这里改代码,代码应该就是 不鼓励改动,但是允许扩展
    2. 创建 枚举类

    public enum SectionTypeEnum implements IUnexEnum<SectionTypeEnum> {
        PROMO_SCOPE("0101", "BOTH"), PROMO_CONDITION("0201", "SINGSTART"),
        PROMO_CONDITION_PARAM("0202", "NOTALL"), PROMO_INCENTIVE("0102", "SINGEND");
        }
    

    包含类路径的枚举类

    public enum SectionEnum {
     
        BOTH("com.xx.install.calc.model.SectionAbBoth"),
        NOTALL("com.xx.install.calc.model.SectionAbNotAll"),
        SINGEND("com.xx.install.calc.model.SectionAbSingleEnd"),
        SINGSTART("com.xx.install.calc.model.SectionAbSingleStart"); 
        SectionEnum(String className) {
            this.setClassName(className);
        } 
        private String className; 
        public String getClassName() {
            return className;
        } 
        public void setClassName(String className) {
            this.className = className;
        }
    
    }
    
    1. 改造后
      如果以后还有更改,我们只需要扩展 枚举类和对传入的因子做修改,如果传入的因子会很多种的变化,我们会采用另外一种方法,
      public static SectionAb createSectionByEnum(String sybolend, String sybolStart ) throws Exception{
            String endFlag = !Strings.isNullOrEmpty(sybolend)?"01":"02";
            String starFlag =  !Strings.isNullOrEmpty(sybolStart)?"01":"02"; 
            String result = UnexEnumUtil.code2Enum(SectionTypeEnum.class , String.valueOf(endFlag+starFlag)).desc();
            String className = SectionEnum.valueOf(result).getClassName();
            SectionAb sectionAb = (SectionAb) Class.forName(className).newInstance();
            return sectionAb;
        }
    
    展开全文
  • Java跳出If代码

    千次阅读 2020-06-12 12:09:13
    在处理某个业务逻辑时需要使用If判断然后进入If或则Else的代码块,但是如果需要在代码块执行过程中出现某种情况需要跳出If代码怎么做? 可以使用设置语句标签,然后使用break 标签 如下: out:if (u.getId() == ...

    在处理某个业务逻辑时需要使用If判断然后进入If或则Else的代码块,但是如果需要在代码块执行过程中出现某种情况需要跳出If代码块怎么做?
    可以使用设置语句标签,然后使用break 标签
    如下:

    out:if (u.getId() == null) {
                            	//todo 处理逻辑
                                if (u.getId() != null) {
                                    break out;
                                }
                                //todo 处理逻辑
                                if (u.getId() != null) {
                                    break out;
                                }
                                //todo 处理逻辑
                                });
                            }
                        }
    
    /**
         * 跳出If代码块
         */
        public static void method() {
            int i = 0;
            out:if (i < 10) {
                System.out.println(0);
                //实际操作应该是每次处理都会不一样 如果每次处理一样可以使用do while来处理循环判断
                i+=5;
                if (i >= 10) {
                    break out;
                }
                System.out.println(1);
                i+=5;
                if (i >= 10) {
                    break out;
                }
                System.out.println(2);
                i+=5;
                if (i >= 10) {
                    break out;
                }
                System.out.println(3);
    
            }
    
        }
    

    注:此功能类似于C++的goto语法。
    goto作为Java语法中的保留字,但不支持使用goto。

    展开全文
  • 这是一本python书中的代码 书中支持的python是2.5.x 我系统的环境是2.7.6 不知道这两处怎么修改 求助啊!!! ============================================ o(╯□╰)o 我知道了 是缩进造成的 ,,, ============...

    stack=[]defpushit():stack.append(raw_input('Enternewstring:').strip())defpopit():iflen(stack)==0:print'Cannotpopfromanemptystack!'else:print'Removed[',`stack.pop()`,']'de...

    stack = []

    def pushit():

    stack.append(raw_input(' Enter new string: ').strip())

    def popit():

    if len (stack)==0:

    print 'Cannot pop from an empty stack!'

    else:

    print 'Removed [', `stack.pop()`,']'

    def viewstack():

    print stack #call str() internally

    CMDs = {'u': pushit, 'o': popit, 'v': viewstack}

    def showmenu():

    pr = ''' #报错1 原因好像是 局部变量已声明但为使用

    p(U)sh

    p(O)p

    (V)iew

    (Q)uit

    Enter choice: '''

    while True:

    while True:

    try:

    choice = raw_input(pr).strip()[0].lower() #报错2 未定义

    except (EOFError,KeyboardInterrupt,IndexError):

    choice = 'q'

    print '\nYou picked: [%s]' % choice

    if choice not in 'uovp':

    print "Invalid option, try again"

    else:

    break

    if choice == 'q':

    break

    CMDs[choice]()

    if __name__ == '__main__':

    showmenu()

    ####################################################

    这是一本python书中的代码 书中支持的python是2.5.x

    我系统的环境是2.7.6 不知道这两处怎么修改 求助啊!!!

    ============================================

    o(╯□╰)o 我知道了 是缩进造成的 ,,,

    ============================================

    展开

    展开全文
  • 你已经看了无数使用 if-else 语句的教程,你可能也读过不少使用 if-else 作为事实上的分支技术的编程书籍。它可能是也是你日常默认的编码模式。但是,让我们从今天起结束这种方法,...
  • 引入:如果平时执行的过程超过两个分支,则使用if-elif语句if-elif语句结构if判断条件:要执行的代码elif判断条件:要执行的代码……else:要执行的代码判断条件:一般为关系表达式或者bool类型的...
  • ”本质上,我所做的是,编写一些代码,将取一个基本值(例如10),从信用卡余额中扣除(考虑利息),如果将余额设为负数(如已还清)所需的总月数超过12个月,则将其添加到“minmonth”(每月要偿还的金额)中直到月数等于或...
  • 运行没有错误,刚接触图形学,不知道如何使用这段代码。 /*----------------------------------------------------------*/ /* 代码参考如下链接: */ /* http://www.zhanpingliu.org/Research/FlowVis/LIC/LIC.htm ...
  • 引入:如果平时执行的过程超过两个分支,则使用if-elif语句if-elif语句结构if判断条件:要执行的代码elif判断条件:要执行的代码……else:要执行的代码判断条件:一般为关系表达式或者bool类型的...
  • 引入:如果平时执行的过程超过两个分支,则使用if-elif语句if-elif语句结构if判断条件:要执行的代码elif判断条件:要执行的代码……else:要执行的代码判断条件:一般为关系表达式或者bool类型的...
  • 平常使用过程中我们对于enum很少使用,实际上枚举有很多用处,下面是一个关于用枚举代替if-else的一个案例。可以让你的代码更具可扩展性,减少加班改需求的可能。 下面是一个关于加减乘除四则运算的设计 一般的写法...
  • 我想计算总线条、空白线条、注释线条和代码行。但我不能运行这个程序。我知道我计算评论行的方法是错了。真的吗需要帮助。在def FileLineCount(filename):(shotname,extension) = os.path.splitext(filename);if ...
  • The way they use to divide is : everyone can choose one people to join in her group, Such as if A chooses B to join in her group , then B will leave the group she is in now , and joins in the group ...
  • 想要学好python,基础语句的学习是必不可少的。python语句比较多,最老生常谈有for和while,这个我们之前讲的比较多。...只有多个条件都满足,才能够执行后续代码,这个时候需要使用到逻辑运算符。逻辑运算符...
  • if (var != m_availInst.end()) //判断选中的指令集是否正确 { m_instructionType = var->second.type; var->second.extra.width = width; tool.SetInstExtraInfo(&var->second.extra); } else { ...
  • if else 是我们写代码时,使用频率最高的关键词之一,然而有时过多的 if else 会让我们感到想吃,而且阅读起来比较困难,维护起来也比较困难,很容易出 Bug,如下图怎么才让代码简单、高效、优雅起来。1,提前 ...
  • 当在代码区输入main时,第一项就是if _name=='main_':,回车后就可以自动将main结构代码显示在代码区里,非常方便。除了PyCharm提供的这些智能选项模板外,我们自己也可以根据需要来制作代码模板。与函数、类等基本...
  • 做的一个比较老的系统,不要吐槽别人的代码烂 发现不足并改变就是进步代码中有很多if else的代码 可读性很差 在想怎么能进行优化在,找到并学习了策略模式的使用if (msgType = "文本") {// dosomething} else if...
  • 在Java循环中,使用布尔标志而不是if语句是否更有效?看看这两行代码.使用标志:public boolean isSomethingForAnyone() {boolean flag = false;for (Item item : listOfItems) {flag = flag || item.isSomething();}...
  • If the expression is legal, output its value, else ouput an error message. Input There are several test cases, each occupies one line that contains an infix expression. Proceed until the end ...
  • Xcode编译器是智能的,至少要比之前嵌入式时候使用的keil编译器智能。Xcode已经定义了很多的代码块,...事件的起源是某天深夜的时候同时发QQ问我,怎么能把自己现在写的代码像系统那样保存下来,使用的时候只需要填...
  • public class ShouldAsNotIs { public void ShouldAs() { object a = new ShouldAsNotIs(); var b = a as ShouldAsNotIs; if (b == null) ...
  • It's very easy to calculate the minimal error if there is only one test error curve. However, there are several datasets, which means Josephina will obtain many parabolic curves. Josephina wants to ...
  • 我是编程新手,正在上一门课程edx.org网站....有什么方法可以在代码使用return关键字吗?下面是问题和我的代码。在###create a functions using startswith('w')###w_start_test() tests if starts with "w"# f...
  • Problem Description Chiaki has 3n points p1,p2,…,p3n.... If there are multiple solutions, you can output any of them. Sample Input 1 1 1 2 2 3 3 5 Sample Output 1 2 3
  • tag标签中有一个closable属性,但是要在某一条件下删除标签,首先想到的是使用v-if条件判断,但是在此标签中,已使用了v-for,,那么就不能再使用v-if,但是又要实现需求,可以把closable写成变量,并附有条件 ...
  • In Computer Science, pattern matching is the act of checking if a certain sequence conforms (matches) a given pattern. Patterns are usually specified using a language based on regular expression. In ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,725
精华内容 690
关键字:

代码if怎么使用