2011-05-07 14 views

回答

10

我喜歡this -notation,至少在構造函數和複合setter方法,那就是你有多個參數。

  • 您不必爲每個字段提供兩個變量名稱。
  • 從「外部」可以清楚地看出,論據代表了什麼。
  • 這實際上是一種標準方法。

在setter的特定情況下,我沒有真正的意見,因爲方法名稱足夠說明問題,並且實現是一個賦值。

+0

+1:你的前兩個理由是好的。我對最後一個不太確定。 – 2011-05-07 06:58:11

+0

對,我同意。編寫最後一個時,我實際上已經考慮過構造函數。 – aioobe 2011-05-07 06:58:55

3

我喜歡this - 這個類說明了爲什麼

class foo { 

    int value; 
    int otherValue; 

    void setValue(int i) { 
     value = i; 
    } 

    void setOtherValue(int i) { 
     otherValue = i; 
    } 

    // uhh what? 
    void setBoth(int i, int j) { 
     // which one should be first? oh, you guessed and got it wrong? tooooo bad! 

    } 


} 
+1

這是一個可怕的,完全人爲的例子。 – 2011-05-07 06:57:18

+0

我不太確定問題在這裏,但我猜setBoth中的歧義是setValue和setOtherValue都使用了參數i,它讓我感到困惑,應該調用setBoth來設置我嗎? – 2011-05-07 07:00:36

+0

@Aram基本上。 @Monkey假設你在你的IDE中,並且你做了'myFoo.setBoth('並且它彈出了'i'和'j'的名字,它真的不像它說'value'和otherValue那麼明顯' – corsiKa 2011-05-07 07:03:06

1

我不喜歡使用this因爲(accidentially)留出來(雖然主要是使用它)可能導致對更長的方法陰影錯誤。

但是,您應該爲參數使用明智的名稱。 這就是爲什麼我更喜歡使用的參數和局部變量的前綴:

public void setPresenter(Presenter pPresenter) { 
    presenter = pPresenter; //pXxxx stands for 'parameter' 
    Presenter tPresenter = pPresenter; //tXxxx stands for 'temporary' or local 
} 
+0

使用'b'和成員變量的前綴布爾變量與'm_'一起嗎?;-) – aioobe 2011-05-07 06:54:35

+0

不,我沒有使用匈牙利表示法,也沒有爲成員使用前綴。 :)如上所述,這可以更容易地防止影子錯誤,以及您是否正在使用參數,局部變量或成員 - 特別是在較長的方法中。 – Thomas 2011-05-07 06:55:52

+0

這與Software Monkey的建議類似,更接近我發佈的第二種方法。我認爲問題的關鍵是確保本地範圍變量與成員變量分離。我傾向於過度使用「這個」來明確這一點,但有些情況下它變得多餘 - 就像短小的製片人一樣。 – 2011-05-07 07:13:49

2

我們用實例變量的TLA的方法充分的話,那麼我們將有:

public void setPresenter(Presenter prs) { 
    presenter=prs; 
    } 

這使得相當清楚的名字避免了由於省略了this而導致的錯誤分配錯誤,並將長期/大範圍標識符與短期/窄範圍標識符區分開來。