标题的措辞不完全正确,但一般的问题是比较这两个代码块。第一个是原始文件,第二个是将替换原始文件。
这实际上是提高了代码效率还是提高了可读性?我不认为它们在功能上有所不同,除非我遗漏了一些东西。
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是否需要大括号(
{}
)取决于您的编码标准。