java变量名

时间:2011-06-20 13:30:30

标签: java coding-style naming-conventions

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

我的观点:

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

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

很容易理解(vs 学生的学生任何人

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

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

criteriaBuilder.equal(nameExpression, name);

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

是否有针对此类推荐的公开资助?有人使用相同的规则吗?还有其他选择吗?

4 个答案:

答案 0 :(得分:7)

对我来说听起来像Hungarian Notation

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

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

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

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

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

答案 1 :(得分:6)

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

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

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

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

答案 2 :(得分:2)

策略应该是使用描述性变量名。单字母变量名称不好,但是完全基于类名的变量名称也是如此。你的主要论点是描述变量名。

至于其他人:

  • 它有助于自我评论代码 - 不,它复制来自变量声明的信息
  • 我们的ide为此提供直接支持 - 如果替代方案没有提供任何好处,那只会是一个争论
  • 你可以直接看到你使用苹果而不是梨(或熊;-)) - 这是类型系统的工作

当然,如果你的类名是描述性的,那么有时候变量具有相同名称是有意义的 - 当变量描述一个没有任何显着特征的类的实例时。如你的例子所示:

for (Student student: students) { ... }

如果你正在循环所有学生,这很好。但是,如果您有Student的非通用实例,则变量名称应描述学生在该计划的这一部分中具有哪些特定角色(例如candidategraduate)。

答案 3 :(得分:1)

通常,您的变量名称应该有助于开发人员快速查看他们实际代表的内容。 Student student如果定义的关系表达了​​任何与学生之间的关系,就像Student[] students(或更好的某些学生集合)可以用于Professor类之类的

String string通常是一个坏主意,因为它没有说明该变量的使用。更好的名称将是String nameString description或类似名称。在某些情况下,重要的是你正在处理一个字符串 - 比如一般字符串实用程序 - 你可以调用变量string但是如果你有两个或更多,你应该使用更好的名字(例如{{ 1}}和source等取决于类/方法。)

恕我直言,添加前缀/后缀可能是一个好主意,如果他们告诉你一些关于它的基本名称不会的变量,例如:在Web环境中,您可以处理由用户输入的字符串以及转义字符串(例如,以防止代码注入),因此您可以使用前缀/后缀在用户输入版本和转义对应项之间进行区分。