标题的措辞不完全正确,但一般的问题是比较这两个代码块。第一个是原始文件,第二个是将替换原始文件。

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

1st:

    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;
        }
    }


2nd:

    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是否需要大括号({})取决于您的编码标准。

10-06 05:50