java - if、else if、else 语句的功能性和可读性

标签 java if-statement

不完全是如何表达标题,但一般问题是比较这两个代码块。第一个是原来的,第二个是替代它的。

这实际上提高了代码的效率还是仅仅提高了可读性?我不相信它们在功能上有什么不同,除非我遗漏了一些东西。

第一:

    if(stl1YVal < stl2YVal){
        return -1;
    }else if(stl1YVal > stl2YVal){
        return 1;
    }else{
        if(stl1XVal < stl2XVal){
            return -1;
        }else if(stl1XVal > stl2XVal){
            return 1;
        }else{
            return 0;
        }
    }

第二次:

    if(stl1YVal < stl2YVal || stl1XVal < stl2XVal){
        return -1;
    }else if(stl1YVal > stl2YVal || stl1XVal > stl2XVal){
        return 1;
    }else {
        return 0;
    }

编辑:我将整个方法放入其中,以便它对人们更有意义......如果人们有答案/解决方案以使其更具可读性和功能性(因为似乎第二个方法并不等效)我们将不胜感激。

(由于文本行简单,它们被命名为 STL - 我没有命名它们)

public int compare(SimpleTextLine stl1, SimpleTextLine stl2){
        //0 -> stl1 and stl2 are equivalent, maintain current order
        //-1 -> stl1 comes before stl2
        //1 -> stl2 comes before stl1

        float stl1XVal = Math.round(stl1.getxLinePos());
        float stl1YVal = Math.round(stl1.getyLinePos());
        float stl2XVal = Math.round(stl2.getxLinePos());
        float stl2YVal = Math.round(stl2.getyLinePos());

        if(stl1YVal < stl2YVal){
            return -1;
        }else if(stl1YVal > stl2YVal){
            return 1;
        }else{
            if(stl1XVal < stl2XVal){
                return -1;
            }else if(stl1XVal > stl2XVal){
                return 1;
            }else{
                return 0;
            }
        }
    }

最佳答案

我认为原始代码的“更干净”版本是其中之一:

// Option 1 (eliminating redundant 'else' clauses and nesting)
if (stl1YVal < stl2YVal)
    return -1;
if (stl1YVal > stl2YVal)
    return 1;
if (stl1XVal < stl2XVal)
    return -1;
if (stl1XVal > stl2XVal)
    return 1;
return 0;
// Option 2 (using conditional ternary operator)
return (stl1YVal < stl2YVal ? -1 :
        stl1YVal > stl2YVal ? 1 :
        stl1XVal < stl2XVal ? -1 :
        stl1XVal > stl2XVal ? 1 : 0);

我认为选项 2 很棒。选项 1 是否需要大括号 ({}) 取决于您的编码标准。

关于java - if、else if、else 语句的功能性和可读性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42305765/

相关文章:

r - 非常慢 For, if else if R 中的语句

c# - 将命令模式调整为建立多个 API 连接的单例

java - Spring安全授权

java - 错误 backtype.storm.daemon.executor - java.lang.NoClassDefFoundError : org/I0Itec/zkclient/serialize/ZkSerializer

c - 无法将 12 小时格式转换为 24 小时格式

php - 使用 header() 重新加载页面后使用 echo() 写入文本

php - 根据当前日期和表日期删除mysql表行

java - If 语句 [help] Java 新手

java - 在 Android 的 Java 中,它更快更高效

java - List of Lists 的列表(用 N 深度展平 ArrayList)