2012-01-20 25 views
2

例如:在方法調用和方法簽名參數中使用相同的變量名是否是一種好的做法?

int a; 
int b; 

int value = getValue(a,b); 


private int getValue(int a, int b) 
{ 

    int value = a+b; 
    return value; 

} 

是上述實際的或者是被認爲是不好的做法,後來在發展會引起問題。

+3

你的例子不會編譯。 – ChaosPandion

+0

你能解釋一下你的問題嗎? – antiduh

+1

There ... ummm ... *在您的示例中沒有*方法參數。 –

回答

9

我意識到這是一個人爲的例子來證明你問什麼,但你的例子包含命名問題,我將指出:

int a; // <---- right here 
int b; // <---- and here 

int value = getValue(a,b); // <--- and a little here 

private int getValue(int a, int b) 
{ 
    int value = a+b; 
    return value; 
} 

問題不無論變量名稱是否匹配或與方法中調用的名稱不匹配。 問題是變量名稱不被稱爲任何有意義的。這比你問的要多得多。

讓我們重新因子的方法來讓這個例子略少做作......

int a; 
int b; 

int value = GetSum(a,b); 

private int GetSum(int firstValue, int secondValue) 
{ 
    return firstValue + secondValue; 
} 

的方法是現在有點更清潔,更直觀地反映了它的目的。現在我們重新提出問題...... ab應該重新命名以匹配方法中的那些?

最有可能不是。方法中的名稱已更改以指示其上下文。該方法獲得兩個值的總和,即第一個和第二個值。那麼ab的背景是什麼?他們是否只被稱爲第一個和第二個?或者他們是否傳達了一些其他含義尚不明確?喜歡的東西:

int milesToFirstDestination; 
int milesToSecondDestination; 

或:

int heightOfPersonInInches; 
int heightOfStepstoolInInches; 

或將需要兩個值中的任何其他例子來概括爲了某種目的。如果我們將該上下文添加到變量名稱中,那麼我們當然不希望將其添加到方法中。該方法應儘可能具有通用性,執行單個任務而無需擔心該任務。

簡而言之,這既不是好的也不是壞的做法,因爲它不是可以考慮的東西。有些時候,巧合的是,名字是相同的。 (例如,這可能會發生在私人助手方法中)。但它們與遵循標準或慣例的結果不同,而是因爲巧合地具有相同的含義。

+0

大聲笑,你應該寫一本書,這是好東西的人,謝謝 – Xerxes

+0

@farhad:我正處於這樣做的早期階段,實際上:)如果我只能用一個詞來形容自己,它會「過分冗長「。事實上,Stack Overflow爲寫作提供了極好的實踐基礎。 – David

+0

偉大的答案大衛。 –

8

你的意思是一個很好的做法,始終命名以同樣的方式作爲參數的方法(在調用點)的作爲參數的方法簽名的方法變量? (你的例子不清楚,不會編譯,並且不包含任何參數...)

不 - 你絕對不需要那樣做。在許多情況下,你會調用一種通用的方法,但它不能理解你的上下文 - 但你應該在你的調用方法中以變量的方式命名變量,這種方式在這種情況下是有意義的。

+0

我認爲上下文在這裏是一個非常重要的詞。人們總是希望讓編程實踐變成黑色或白色。 – ChaosPandion

1

只在非常有限的情況下。例如,考慮一下你最少需要兩個數量。在調用代碼中,你會知道這兩個數量是多少。但是在一般的Min(a,b)方法中,它不知道或關心這些數量的含義。


如果有人一般真,那麼每一個變量名只能一次每個程序中使用。您將不再需要參數傳遞給方法,並且每個變量都將是全局的(假設單線程代碼)。

我們儘量不寫這樣的程序。對於初學者來說,它使編寫遞歸代碼變得不那麼容易理解。

1

在方法調用和方法簽名參數中使用相同的名稱是否是一種很好的做法?

我不會有一個規定說你必須應該總是做到這一點。首先,它提出了實際問題。試想一下:

private int Square(int n) { return n * n; } 

你打算在這裏做:

int a = 3; 
int b = 4; 
int cSquared = Square(a) + Square(b); 

這是不可能的,它甚至沒有任何意義,給雙方ab相同的名稱,並使用名稱n。更有意義的是給參數名稱在它們正在使用的上下文中有意義。因此,在這裏,考慮畢達哥拉斯定理a^2 + b^2 = c^2,我們將使用ab作爲局部變量名稱。但在另一種情況下,另一個名字可能更有意義。例如:

int length = 17; 
int areaOfSquare = Square(length); 

此外,使用名稱在調用方法的上下文中更有意義。不要在每種情況下使用相同的名稱。

相關問題