陳舊語法密度之五——用三元表示式消滅if-else if-else
阿新 • • 發佈:2019-01-08
用三元表示式消滅if-else if-else
前例的三元表示式實現如下:
public String getReversedOperator2() { return operator.equals("=") ? "!=" : operator.equals("==") ? "!=" : operator.equals("!=") ? "=" : operator.equals("<") ? "!<" : operator.equals(">") ? "!>": operator.equals("<=") ? "!<=" : operator.equals(">=") ? "!>=" : "?"; }
如果不能當場return,可以如此:
public String getReversedOperator21() { String reversedOperator = operator.equals("=") ? "!=" : operator.equals("==") ? "!=" : operator.equals("!=") ? "=" : operator.equals("<") ? "!<" : operator.equals(">") ? "!>" : operator.equals("<=") ? "!<=" : operator.equals(">=") ? "!>=" : "?"; //Do something here. return reversedOperator; }
三元表示式有這樣幾種優勢:
資訊密度更大,對應關係更清晰
面向結果,而非過程,從而激發“本能封裝”。在if-else if-else結構中,在任何一個分支中,程式碼可以隨時新增,整個方法的長度就失控了。在三元表示式中,每個分支只能是一個值,而不是產生值的一些程式碼。這就促使人們不得不寫一個方法,未來可能會複用。
主流程與分支流程分離。一個if-else if-else結構到底在做什麼?可能需要仔細看看才能看清楚;但一個三元表示式就做一件事情:給一個變數賦值,一望而知。而數值的來源,要麼一行程式碼說清楚,要麼則抽象成各自的方法。
儘管三元表示式不是面向物件的理念,然而卻是非常好的高內聚,低耦合的產物;也是“資訊隱匿”的利器。