2011-03-30 120 views
0

什麼是更好的編碼習慣,爲什麼?什麼是較好的編碼習慣?

string str1 = textBox1.Text; 
string str2 = textBox2.Text; 
void FunctionName (str1, str2); 

或者

void FunctionName(textBox1.Text, textBox2.Text); 
+6

沒關係。 **這不是優化。** – 2011-03-30 06:30:50

+0

如果有人願意接受代碼,那麼它確實很重要。在所示的示例中,第二個版本比第一個示例更容易理解。如果你試圖吸收這些東西的屏幕全部,並且第一種方式都是虔誠地完成的話,那麼吸收會更難。 – 2011-03-30 08:42:39

+2

@Dave:這絕對是一個意見。聲稱後者更容易閱讀或理解幾乎沒有普遍的合理性。 (請看這裏的答案以進行確認!) – 2011-03-30 10:14:10

回答

3

我認爲強制執行一種方法的編碼標準規則往往太嚴厲。我傾向於使用在每種情況下最可讀的方法。這甚至可能在相同的方法內變化!

在給出的例子中,我認爲第二個選項實際上更具可讀性和可理解性 - 它非常清楚地顯示了函數調用和兩個控件之間的關係。

在@ OD的示例中,在控制值傳入之前,額外的事情正在「完成」,變得有點難以看到發生了什麼,並且將「混淆」變量拉出來並以某種方式命名它們這就解釋了你想要達到的目標,使代碼更具可讀性(和自我記錄)。

一般來說,我會說:通過把一切都直接進入方法/函數調用

    1. 開始如有傳遞的參數有太長的call.path.to.get()來。在()。值,可以考慮將其拉出到它自己的變量
    2. 如果代碼行整體變得太長,考慮參數分割到每條線分別
  • 2

    就個人而言,我會去與選項2,看到它的代碼更少,因此更容易閱讀和理解另一家開發商前來代碼(多)後上。

    我想象編譯器會優化第一個到第二個無論如何(但我不知道這是真的)。

    +5

    不。它實際上是「優化」第二個到第一個。 – 2011-03-30 06:31:15

    +0

    @Cody:感謝您的信息 - 很高興知道。 – 2011-03-30 07:21:56

    2

    從性能的角度來看,它將是相同的,因爲編譯器會優化它,所以你選擇什麼樣的練習並不重要。

    8

    當你不打算對它做任何事情時,沒有必要聲明單獨的變量。所以我說後者更好。

    在前面的例子中,您正在做不合適的工作,並增加了代碼的複雜性。

    現在,如果您打算對這些值進行一些處理,則可以選擇使用前一種方法。但是你應該給他們更多描述性的名字,而不是str1str2來傳達他們的目的。

    +1

    除此之外,像'str1'和'str2'這樣的變量名稱是不好的,因爲它們對於它們所持有的東西沒有任何用處。 – Steven 2011-03-30 08:19:52

    +1

    @Steven:這就是我最後一句話的意思。 – Ikke 2011-03-30 08:24:51

    +0

    我upvoted這個答案,因爲爲什麼不需要時初始化一個新的變量。我認爲只需要發送已經在其他地方初始化的值就需要多一點時間。但是,如果您需要針對叮咬執行操作,最好分配它們,做功,然後退回。 – Mike 2016-12-07 21:15:22

    4

    我會說第一個選項更好,如果任何人需要在將字符串傳遞給函數之前對其進行任何操作,他會傾向於在函數調用上執行此操作,從而導致嵌套調用的時間更長,更不可讀,因爲它看起來像:

    FunctionName(AnotherFunc(textBox1.Text), AnotherAnotherFunc(textBox2.Text)); 
    

    具有字符串之間可以更容易地使其中STIL可讀的變化。

    +2

    反對者!我喜歡你的風格。在這樣一個完全微不足道的例子中,我認爲第二個是明顯的選擇。但是,正如你所建議的,生產代碼很少如此微不足道。 +1 – 2011-03-30 06:32:35

    2

    如果您對用戶輸入執行某種健全性檢查,則需要前一版本。例如,你可以檢查string.Empty等的文本框文本。在你的情況下,創建另一個變量沒有意義,它是多餘的。

    從.NET的角度來看,執行不會改變,因爲它將在JIT期間進行優化。

    例如,

    string str1 = textBox1.Text.Trim(); 
    string str2 = textBox2.Text.Trim(); 
    if(!string.IsNullOrEmpty(str1) && !string.IsNullOrEmpty(str2)) 
    { 
        FunctionName (str1, str2); 
    } 
    

    string str1 = textBox1.Text.Trim(); 
    string str2 = textBox2.Text.Trim(); 
    if(ValidateInput(str1) && ValidateInput(str2)) 
    { 
        FunctionName (str1, str2); 
    } 
    
    2

    首先它不會使關於處理速度的差異。兩者都需要相同的時間。 Option2是我會選擇的,因爲它更容易閱讀IMO。

    在某些情況下,將值放入變量中僅僅是爲了讓您在調試代碼時在其上放置斷點。它並不適用於這個例子,但有些情況下我會選擇option1只是因爲這個原因。