有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (6) 个答案

  1. # 1 楼答案

    if(A)
    {
    }else
    if(B)
    {
    }else
    if(C)
    {
    }else
    if(D)
    {
    }else
    { }
    

    所有的if仍然需要进行“计算”,使其类似于“O(n)”。应尽可能避免使用switch(Lalala)

  2. # 2 楼答案

    有时由于处理器体系结构的原因,找到一种完全避免分支的方法更有效;这可能被认为是if语句的一个缺点

  3. # 3 楼答案

    那么,我必须回过头来问的问题是,“相对于什么”

    如果您的意思是与switch语句相反,那么除了可读性之外,它有时也会更有效。作为一项规则(当然是在C#中,很可能在其他分支中),在编译时,低于一定数量的分支只会转换为一系列if语句,但超过该数量时,它将转换为基于哈希的查找和跳转,这在平均情况下可能更快

    或者,如果您对不同情况的相对频率有很好的了解,那么使用一组if语句可以提高效率。例如,如果95%的案例与第一个分支匹配,4%与第二个分支匹配,1%与所有其他分支匹配,则通过进行单个比较,甚至可能不进行分支,这可以为95%的案例提供更好的性能

    所以可能在这种情况下会提高效率

    尽管如此,可读性仍然非常重要。作为一个极端的例子,有一种图灵完备语言,它的设计只是为了看看一种图灵完备语言的编译器有多小。它的设计者将语言命名为“brainf**k”。这本身就是对可读代码在实际编程中的重要性的一个重要评论

    现在,大量if语句的一个更大的问题是,它通常表示您正在通过那些if语句建模,而这些if语句可以通过类层次结构更好地建模。在某种程度上,这只是可读性的另一种表现(假设程序以任何一种方式工作)。然而,它关系到整个程序的可读性和可理解性。它将极大地影响你对程序的心智模型、可扩展性,不仅影响你对它的维护程度,还影响你对它的设想。它很容易成为一个程序的区别,一个是在有人想出如何摆脱它之前成为遗留时间接收器,另一个是不断增长以继续提供投资回报

  4. # 4 楼答案

    丘斯达是对的。交换机结构优于多if-else。下一种方法是使用enum作为开关键。在这种情况下,如果忘记在交换机中提及某个枚举元素,则会收到警告

    但如果您使用的是enum和switch,请继续进行更好的设计:完全删除switch

    在枚举中声明抽象业务方法。为每个枚举元素实现它。调用枚举元素。方法()而不是实现开关

    这里有一个例子

    enum Foo {
        ONE {
            public void foo() {
               // do something
            }
        }, 
    
        TWO {
            public void foo() {
               // do something
            }
        }, 
    
        ;
        public abstract void foo();
    }
    

    以下是使用此选项的代码:

        Foo.valueOf(System.getProperty("foo")).foo();
    

    将此行与以下内容进行比较:

        String foo = System.getProperty("foo");
        if("ONE".equals(foo)) {
            //.....
        } else if("ONE".equals(foo)) {
            //.....
        } else {
            //.....
        }
    

    我认为不需要任何评论

  5. # 5 楼答案

    每次编写if/else都会增加必须测试的代码路径数

  6. # 6 楼答案

    如果一个接一个地有很多If语句,那么switch-case语句更有用。对于每个可能的inut,它至少有一个固定的响应时间,因为它不需要遍历所有if语句

    很多if(and else)语句通常表示

    a)Violation of Single responsibility Principle

    b)需要重构为Strategy Design Pattern