2010-10-04 46 views
1

我有以下代碼:問題IFS的

 boolean Short = x(); 
    boolean Long = y();  
    boolean Longer = z(); 

    if (Short) 
     return "abc"; 

    if (Long) 
     return "def"; 

    if (Longer) 
     return "ghi";   

三個布爾方法(X,Y,Z)都做價值數學。如果上述3個if不計算爲真,我需要額外的if語句來返回數字。這怎麼能做到,有沒有多餘的ifs?另外,我需要知道ifs的優先級?我的名字是「dotnet」,但我同樣是Java程序員(我花了很多時間試圖像.NET一樣撿起它)。

感謝

回答

1

沒有多餘的if。如果三種情況都不是true,您只需要額外的return。如果需要,還可以添加else子句。

boolean Short = x(); 
boolean Long = y();  
boolean Longer = z(); 

if (Short) 
    return "abc"; 
else if (Long) 
    return "def"; 
else if (Longer) 
    return "ghi"; 
else 
    return "something else"; 

或者,如果方法x()y()z()無副作用:

if (x()) 
    return "abc"; 
else if (y()) 
    return "def"; 
else if (z()) 
    return "ghi"; 
else 
    return "something else"; 

此外,您還可以使用?操作更加緊湊,但也許更神祕的語法:

return x()? "abc" : 
     y()? "def" : 
     z()? "ghi" : 
     "something else"; 

但是ifs可能比這個更可讀:-)

+0

副作用的定義是什麼? – dotnetdev 2010-10-04 22:35:05

+0

函數或方法除了返回值外,還會以可觀察的方式修改其環境;例如,它可以修改一些外部變量。如果方法'x()','y()'和'z()'有副作用,那麼我的答案中的第二個和第三個代碼片段不一定等同於第一個代碼片段,因爲在第一個代碼片段中,方法總會被評估(因此總會產生相應的副作用),而在第二和第三代碼片段中,有些方法可能不會被評估(因此不會產生相應的副作用)。 – Grodriguez 2010-10-04 23:01:23

5

這很好,但你並不需要另外,如果:

boolean Short = x(); 
boolean Long = y();  
boolean Longer = z(); 

if (Short) 
    return "abc"; 

if (Long) 
    return "def"; 

if (Longer) 
    return "ghi"; 

return "none of the above"; 

if報表將按順序評估,一旦其中一個是真,return聲明將在年底執行方法,所以沒有任何評估之後。

如果它們都不是真的,則最後的return將結束執行。

你可以替換與調用自己的變量,如果你不需要評估y()z()x()是真實的,也不z()如果y()是真實的:

if (x()) 
    return "abc"; 

if (y()) 
    return "def"; 

if (z()) 
    return "ghi"; 

return "none of the above"; 
1

只要把:

boolean Short = x(); 
boolean Long = y();  
boolean Longer = z(); 

if (Short) 
    return "abc"; 

if (Long) 
    return "def"; 

if (Longer) 
    return "ghi"; 

return "xyz"; 
0

嗯..可能是這個

if (x()) 
    return "abc"; 

if (y()) 
    return "def"; 

if (z()) 
    return "ghi"; 
return "smt"; 
+2

如果'y()'或'z()'有副作用並且需要運行而不管x()的值如何,這是不一樣的。 – Oded 2010-10-04 20:18:31

+0

@Oded:是的。但是,如果這些功能有任何副作用,這是不好的,恕我直言。 – 2010-10-04 20:25:09

+0

我的經驗是期待在代碼中的壞東西;) – Oded 2010-10-04 20:25:38