你能否给出一些很好的理由让类名作为任何变量名称的一部分?我们使用这个政策,我认为这非常有用。一些团队成员想要恢复决定。
我的观点:
你可以直接知道你在说什么:
for(学生:学生){ ... }
很容易理解(vs 学生的或学生任何人)
在细微差异很重要的地方减少混淆:
criteriaBuilder.equal(nameExpression, name);
我能看到的唯一一个论点就是它使代码更长(我认为这不是现代IDE的问题)。
是否有针对此类推荐的公开资助?有人使用相同的规则吗?还有其他选择吗?
答案 0 :(得分:7)
对我来说听起来像Hungarian Notation。
原则上这听起来不错,但老实说我不确定它有充分的理由:
您没有提到匈牙利表示法的一个问题是,如果您重构代码,您还必须更改所有变量名称。每日WTF上有很多例子,其中变量被命名为'strSOMETHING'或'intSOMETHING',即使这些类型被定义为其他类型。
一般来说,IMO使用匈牙利表示法的情况非常脆弱,一般我不建议将其作为政策。
(如果这不是你所说的,我道歉!)
答案 1 :(得分:6)
关于这个问题的圣经是Steve McConnel的书, Code Complete ,这是关于这类软件构建实践的最全面的书。他有一整章关于变量命名及其重要性的原因。
关键是要使名称完整描述变量的作用,以便阅读它的人很容易理解。如果它实现了,那么这是一个好习惯。
学生看起来像一个简单易懂的政策,但它有一个直接的劣势 - 它不包含有关变量的额外信息。你已经知道它是一名学生。如果您对该对象有任何其他了解,那么将其添加到变量名称 - studentUnderReview,graduatingStudent等。只有在您不知道其他任何内容时才应使用“student”,例如该变量用于迭代所有学生。现在在一个很长的方法中,通过查看名称来了解类型是有用的,但是如果变量具有短范围,那么它是否有用是否有用。有一些研究(参见McConnel)表明,对于范围很短的变量,例如循环指数,短名称更好。
只要有两个变量,该系统就会崩溃。如果默认是调用一个变量“student”,那么诱惑就是调用两个变量“student1”和“student2”,这实际上是不好的做法(详见McConnel)。你需要创建描述对象的名称 - goodStudent和badStudent; studentBeingSaved和studentBeingRead。
答案 2 :(得分:2)
策略应该是使用描述性变量名。单字母变量名称不好,但是完全基于类名的变量名称也是如此。你的主要论点是描述变量名。
至于其他人:
当然,如果你的类名是描述性的,那么有时候变量具有相同名称是有意义的 - 当变量描述一个没有任何显着特征的类的实例时。如你的例子所示:
for (Student student: students) { ... }
如果你正在循环所有学生,这很好。但是,如果您有Student
的非通用实例,则变量名称应描述学生在该计划的这一部分中具有哪些特定角色(例如candidate
或graduate
)。
答案 3 :(得分:1)
通常,您的变量名称应该有助于开发人员快速查看他们实际代表的内容。
Student student
如果定义的关系表达了任何与学生之间的关系,就像Student[] students
(或更好的某些学生集合)可以用于Professor
类之类的
String string
通常是一个坏主意,因为它没有说明该变量的使用。更好的名称将是String name
,String description
或类似名称。在某些情况下,重要的是你正在处理一个字符串 - 比如一般字符串实用程序 - 你可以调用变量string
但是如果你有两个或更多,你应该使用更好的名字(例如{{ 1}}和source
等取决于类/方法。)
恕我直言,添加前缀/后缀可能是一个好主意,如果他们告诉你一些关于它的基本名称不会的变量,例如:在Web环境中,您可以处理由用户输入的字符串以及转义字符串(例如,以防止代码注入),因此您可以使用前缀/后缀在用户输入版本和转义对应项之间进行区分。