java变量名

yma*_*ros 3 java coding-style naming-conventions

你能给出一些很好的理由让类名作为任何变量名称的一部分吗?我们使用这个政策,我认为这非常有用.一些团队成员想要恢复决定.

我现在的论点:

  • 你可以直接知道你在说什么:

    for(学生:学生){...}

很容易理解(对学生学生任何人)

  • 它有助于自我评论代码
  • 我们的ide为此提供直接支持
  • 你可以直接看到你用的是苹果而不是梨(或熊;-))

在细微差异重要的地方减少混淆:

criteriaBuilder.equal(nameExpression, name);
Run Code Online (Sandbox Code Playgroud)

我能看到的唯一一个论点就是它使代码更长(我认为这不是现代IDE的问题).

这样的建议是否有公开供应?有人使用相同的规则吗?还有其他选择

小智 7

这对我来说听起来像匈牙利表示法.

原则上这听起来是个好主意,但老实说我不确定它有充分的理由:

  • 自我评论/记录代码 - 这应该是可能的,而无需在变量名称中添加类型;
  • IDE还应该支持查看变量的类型而不将其放在变量名中(例如,Eclipse可以执行此操作)
  • 我不知道这真的是一个优势.

匈牙利表示法的一个问题,你不提的是,如果你重构代码,你必须改变所有的变量名也是如此.在每日WTF上有很多例子,其中变量被命名为'strSOMETHING'或'intSOMETHING',即使这些类型被定义为其他类型.

一般来说,IMO使用匈牙利表示法的情况非常脆弱,一般我不建议将其作为一项政策.

(如果这不是你所说的,我道歉!)


DJC*_*rth 6

你在这个问题上的圣经是Steve McConnel的书Code Complete,这本书是关于软件构建实践的最全面的书.他有一整章关于变量命名及其重要性的原因.

关键是要使名称完整描述变量的作用,以便阅读它的人很容易理解.如果它实现了,那么这是一个很好的做法.

学生看起来像一个简单易懂的政策,但它有一个直接的劣势 - 它不包含有关变量的额外信息.你已经知道它是一名学生.如果您对该对象有任何其他了解,那么将其添加到变量名称 - studentUnderReview,graduatingStudent等.只有在您不知道其他任何内容时才应使用"student",例如该变量用于迭代所有学生.现在在一个很长的方法中,通过查看名称来了解类型是有用的,但是如果变量具有短范围,那么它是否有用是否有用.有一些研究(参见McConnel)表明,对于范围很短的变量,例如循环指数,短名称更好.

只要有两个变量,该系统就会崩溃.如果默认是调用一个变量"student",那么诱惑就是调用两个变量"student1"和"student2",这实际上是不好的做法(详见McConnel).你需要创建描述对象的名称 - goodStudent和badStudent; studentBeingSaved和studentBeingRead.