我写了一些类似于以下内容的代码:
String SKIP_FIRST = "foo";
String SKIP_SECOND = "foo/bar";
int skipFooBarIndex(String[] list){
int index;
if (list.length >= (index = 1) && list[0].equals(SKIP_FIRST) ||
list.length >= (index = 2) &&
(list[0] + "/" + list[1]).equals(SKIP_SECOND)){
return index;
}
return 0;
}
String[] myArray = "foo/bar/apples/peaches/cherries".split("/");
print(skipFooBarIndex(myArray);
Run Code Online (Sandbox Code Playgroud)
这通过分配索引来更改if语句内部的状态.但是,我的同事非常不喜欢这个.
这是一种有害的做法吗?有什么理由这样做吗?
Meh*_*ari 15
是.这显然降低了可读性.以下代码有什么问题?
int skipFooBarIndex(String[] list){
if(list.length >= 1 && list[0].equals(SKIP_FIRST))
return 1;
if(list.length >= 2 && (list[0] + "/" + list[1]).equals(SKIP_SECOND))
return 2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
理解起来要容易得多.一般而言,不鼓励在表达式中存在副作用,因为您将依赖于子表达式的评估顺序.
假设你把它算作"聪明"的代码,那么永远记住Brian Kernighan的引用是件好事:
调试的难度是首先编写代码的两倍.因此,如果您尽可能巧妙地编写代码,那么根据定义,您不够聪明,无法对其进行调试.