使用;这";Java中的参数名与短参数名

使用;这";Java中的参数名与短参数名,java,parameters,this,Java,Parameters,This,你更喜欢哪一种?为什么 public void setPresenter(Presenter presenter) { this.presenter = presenter; } public void setPresenter(Presenter p) { presenter = p; } 我更喜欢this-表示法,至少在构造函数和复合setter方法中是这样,在这些方法中,您有多个参数 您不必为每个字段提供两个变量名 从“外部”来看,这一论点所代表的意义是显而易见的 这

你更喜欢哪一种?为什么

public void setPresenter(Presenter presenter) {
    this.presenter = presenter;
}

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

我更喜欢
this
-表示法,至少在构造函数和复合setter方法中是这样,在这些方法中,您有多个参数

  • 您不必为每个字段提供两个变量名
  • 从“外部”来看,这一论点所代表的意义是显而易见的
  • 这确实是一种标准方法

在setter的特定情况下,我没有什么意见,因为方法名足够解释,实现是一个赋值。

我更喜欢
这个
-这个类说明了原因

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!

    }


}

我不喜欢使用
这个
,因为(不小心)忽略它(大部分时候使用它)可能会导致在更长的方法上隐藏bug

但是,应该为参数使用合理的名称。 这就是为什么我更喜欢为参数和局部变量使用前缀:

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

我们使用全字表示实例变量,使用TLA表示方法,因此我们的:

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

这允许合理清晰的名称,避免因省略
而导致的错误分配错误,并清楚地区分长期/宽范围标识符和短期/窄范围标识符。

是否使用
b
前缀布尔值,以及使用
m
前缀成员变量?;-)不,我不使用匈牙利符号,也不使用成员前缀。:)如上所述,无论您是在使用参数、局部变量还是成员(尤其是在较长的方法中),这都可以更容易地防止隐藏bug和wee。这类似于软件Monkey的建议,它更接近我发布的第二种方法。我认为问题的关键是确保局部范围变量与成员变量分开。我倾向于过度使用“this”来明确这一点,但在某些情况下,它变得多余——比如短setter,-1污染了公共文档领域和内部代码领域,从而伤害了api用户和维护人员。IDE通常针对大多数类型的mis/not分配发出警告。如果有一个方法太长,你会忘记哪一个是什么-重构;-)与使用其他约定相比,这对文档领域的污染和维护人员的伤害更大?至少您知道该变量的用途。如果你不使用任何前缀,你会对api的维护人员和可能的用户造成更大的伤害,因为当他们只有代码时,你不支持这些前缀。这是一个可怕的、完全人为的例子。我不太确定这是什么问题,但是我猜setBoth中的歧义是setValue和setOtherValue都使用了参数I,这让人困惑,在setBoth?@Aram中应该调用哪个参数来设置I@Monkey让我们假设您在IDE中,并且您执行了myFoo.setBoth(
它会弹出名称的
i
j
。它确实不像它说的
value
otherValue
那样明显。是的,现在这很有意义。如果有人教我使用更长的名称,如果它意味着添加更多信息。也就是说,如果方法名称足够解释,它就不应该是一个is苏+1:你的前两个理由很好。我对最后一个理由不太确定。对,我同意。在写最后一个理由的时候,我实际上考虑到了构造器。