我已經寫了下面的if
語句來在Java中:if語句中的條件運算符?
if(methodName.equals("set" + this.name) ||
isBoolean() ? methodName.equals("is" + this.name) :
methodName.equals("get" + this.name)) {
...
}
這是if
寫出這樣的表達,從條件分離狀態的好的做法呢?這個表達能夠被簡化嗎?
我已經寫了下面的if
語句來在Java中:if語句中的條件運算符?
if(methodName.equals("set" + this.name) ||
isBoolean() ? methodName.equals("is" + this.name) :
methodName.equals("get" + this.name)) {
...
}
這是if
寫出這樣的表達,從條件分離狀態的好的做法呢?這個表達能夠被簡化嗎?
我將其更改爲
if (methodName.equals("set" + this.name)
|| methodName.equals((isBoolean() ? "is" : "get") + this.name)) {
...
}
我會放棄冗餘'this.' – 2010-05-13 00:54:22
@軟件猴:這是我的代碼風格,如果它困擾你,我很抱歉。 – Pindatjuh 2010-05-13 01:07:19
@Pindatjuh:夠公平 - 我說「我會」,而不是「你應該」。給每個人自己。它不會打擾我,這只是額外的輸入。 – 2010-05-13 02:32:58
它是好的做法呢?如果它更易於閱讀,這很好。如果(1)它確實可以更容易閱讀,並且(2)那些被它弄糊塗的人不會閱讀它。誰會讀它?
會不會像下面的工作?
if (methodName.equals("set" + this.name)
|| methodName.equals("get" + this.name)
|| (isBoolean() && methodName.equals("is" + this.name))) {
...
}
它比你使用三元運算符的方式更可讀,當然也更容易理解。它還有一個好處,它可以避免對isBoolean
方法進行不必要的方法調用(它有1,2或4個方法調用,而您的方法總是有1或3個;性能增益/損失可能太小)。
而且這裏有名爲"Is this a reasonable use of the ternary operator?"一個用戶有the following to say一個類似的問題:
三元運算符是爲了 返回一個值。
IMO,它不應該改變狀態,而 應該使用返回值。
在另一種情況下,使用if語句。 如果聲明是要執行 代碼塊。
請注意,我包括周圍的括號表達式包含「& &」的可讀性。他們沒有必要,因爲x && y
在m || n
之前被評估。
您是否選擇使用它取決於您,但我傾向於避免使用它以支持可讀性。
您的重寫非常實用,因爲方法「getSomeBooleanProperty」也會通過。雖然,它不像SLaks(主觀)那樣可讀。 – Pindatjuh 2010-05-13 00:10:53
我會傾向於把它與提取一些功能改變
if (methodName.equals(setterForThis())
|| methodName.equals(getterForThis())) {
...
}
:
private String setterForThis() {
return "set" + this.name;
}
private String getterForThis() {
return (isBoolean() ? "is" : "get") + this.name;
}
這是較長的過程,但我沒有真正進入高爾夫反正。
您是否知道現有的Javabean映射工具?有**很多** :) – BalusC 2010-05-12 23:35:08
我沒有什麼特別重要的貢獻,但即使作爲愛三元操作符的人,我也必須注意到,有些人堅信它應該很少被使用。那些人可能會嘮叨你的用法。 – 2010-05-12 23:36:55
@BalusC:我的JavaBean活動的大猜想。我只是爲了業餘愛好和個人使用而實現它,通過每個setter中的'super.property(newValue)'來清理Beans中的語法。 ;-)但我知道他們,謝謝提及。 – Pindatjuh 2010-05-12 23:37:59