1. 程式人生 > >陳舊語法密度之五——用三元表示式消滅if-else if-else

陳舊語法密度之五——用三元表示式消滅if-else if-else

用三元表示式消滅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結構到底在做什麼?可能需要仔細看看才能看清楚;但一個三元表示式就做一件事情:給一個變數賦值,一望而知。而數值的來源,要麼一行程式碼說清楚,要麼則抽象成各自的方法。

儘管三元表示式不是面向物件的理念,然而卻是非常好的高內聚,低耦合的產物;也是“資訊隱匿”的利器。