2014-12-07 54 views
0

我有以下代碼:是修改輸入參數並返回錯誤的方法嗎?

public class MyClass 
{ 
     .... 
} 

public static MyClass MyClassModifier(MyClass myinstance) 
{ 

    ...... 
return myinstance; 
} 

在我看來,那久違MYINSTANCE實際上並沒有做任何事情,在這裏,換句話說這一點,實現了與上面相同的代碼(只要MYINSTANCE未分配在方法的另一個對象):

public static void MyClassModifier(MyClass myinstance) 
{ 

    ...... 

} 

我可以,當然,這樣做:

public static MyClass MyClassModifier(MyClass myinstance) 
{ 

    ...... 
    return new MyClass(); 
} 

但這似乎很笨重,如果MyClass的構造函數有很多參數,這會變得非常笨重,所以問題是,哪一個更可取,爲什麼?

從函數式編程的角度來看,似乎最後一個是要走的路,但我不確定這是最好的方法。

回答

1

是修改輸入參數並返回錯誤的方法嗎?

是的。它們是誤導性的 - 客戶端會假設您的方法讀取輸入參數,創建一個新對象並將其返回。事實上,事情並非如此。返回值的輸入值,並且客戶端無需捕獲它。

關於你的第二個問題,你應該改變輸入值還是創建一個新值,答案很大程度上取決於你試圖達到的目標。沒有任何背景下給你一個更好的答案是不可能的。

從函數式編程的角度來看,似乎最後一個是要走的路,但我不確定這是最好的方法。

是的,在函數式編程中你想要不可變的狀態 - 這意味着MyClass不能被修改,所以你必須返回一個新的實例。

+0

感謝您的回答,這幾乎是我想象的。 關於變異輸入值vs創建一個新的例子,我實際上想到的例子包括一個List作爲輸入值 – ManyRootsofAllEvil 2014-12-07 18:49:26