所以我不打算在這裏維護或優雅..尋找一種方法來減少總體令牌的方法只是爲了好玩。該方法由一個長嵌套的if-else構造組成,我發現(我認爲)使用最少的令牌來實現它的方式是三元運算符。然而java ternary hack
String method(param) {
return
param == null ?
error0 :
param.equals(foo1) ?
condition ?
bar1 :
error1 :
param.equals(foo2) ?
condition ?
bar2 :
error2 :
...
error
}
,有一對夫婦的情況下,除了返回值我也想改變一個字段或調用方法;:從本質上講,我翻譯一下:
String method(param) {
if (param == null)
return error0;
else if (param.equals(foo1))
if (condition)
return bar1;
else
return error1;
else if (param.equals(foo2))
if (condition)
return bar2;
else
return error1;
...
else
return error;
}
本例如,
else if (param.equals(foo3))
if (condition) {
field = value;
return bar3;
}
else
return error3;
什麼是做這個令牌明智最便宜的方式?我現在正在做的是醜陋的,但不會浪費太多令牌(這裏的字段是一個字符串):
param.equals(foo3) && (field = value) instanceOf String ?
condition ?
bar2 :
error2 :
再次強調,重點是不好的編碼,我只是在尋找黑客減少令牌計數。如果有更簡單的方法來寫出整個事物,我也願意。感謝您的任何建議。
編輯:每個單詞和標點符號都計爲一個令牌。因此,例如,「instanceOf String」是兩個令牌,但「!= null」是三個。我可以看到的可能改進的主要內容是「& &」和括號。有沒有一種方法可以將「field = value」置於條件之外的某個位置,如果沒有,那麼是否存在一個使「field = value」成爲布爾值而不需要括號的構造?
你應該被解僱......出大炮和太陽。 – Kevin 2010-02-08 18:33:28
三元運算符很好,但代碼可維護性應該具有更高的優先級。我覺得無論誰要維護你的代碼......即使是你。如果你離開這個,甚至一個月後回來,你會後悔用三元表達式編碼。 – 2010-02-08 18:35:46
我是否正確地認爲有時調用你的驗證也會改變狀態? – blank 2010-02-08 18:40:06