爲什麼這麼多的編程語言使得函數可以將傳遞給它的對象作爲參數進行修改,而不需要某種語法來使調用者清楚。例如考慮:清除函數可以修改其參數
SomeObject A(15), B
B = DoSomething(A)
print(A + " " + B + "\n)
讀取代碼,你會希望輸出是類似於「15 75」,即A是你構造它。然而,大多數語言都可以讓DoSomething改變A.在C++中,你可以通過查看DoSomething的聲明來判斷它是否可能,例如通過查看參數被定義爲非const引用。然而,在很多語言中,比如Python,如果沒有閱讀函數的代碼以確保它永遠不會改變,真的沒有辦法告訴A.
我很多次被這個問題困擾過,特別是在嘗試工作時與別人的代碼使用這種行爲,通常會導致貫穿整行代碼逐行嘗試並找到什麼改變參數...
爲什麼它是語言通常不需要一些顯式語法通過調用說「是的,這個對象可以修改」,例如說「B = DoSomething(inout A)」?
是否有任何編碼標準有助於防止問題發生,除了「從不修改傳入函數的參數」?
選擇一種語言; 「這麼多的編程語言」是很多語言,每種語言的設計決定都不一樣。 – 2009-07-17 07:43:38
Python,C,C++,Java都可以完全按照我的示例中所示的那樣進行,我懷疑還有很多我不知道/使用的東西。 – 2009-07-17 12:06:52