即使在如今,我经常在Java变量和方法中看到下划线,例如成员变量(例如“ m_count”或“ _count”)。据我所记得,在这些情况下使用下划线被Sun称为坏样式。
应该使用它们的唯一位置是常量(例如“ public final static int IS_OKAY = 1;”中的常量),因为常量应该全部为大写而不是驼峰式。在这里,下划线应使代码更具可读性。
您认为在Java中使用下划线是不好的风格吗?如果是(或不是),为什么?
Answers:
如果您现在没有使用它的代码,建议您继续。如果您的代码库使用它,请继续。
编码风格最大的优点就是一致性。如果没有什么要与之保持一致,那么语言供应商的建议可能是一个不错的起点。
ReadableInterface
-绝对冗余。在现代IDE中,您无需指定变量的类型或其范围-着色和快速跳转可为您完成所有工作。因此,IMO在输入多余字符并强迫人们阅读/维护它时是一种不好的风格。
sunDoesNotRecommendUnderscores因为JavaVariableAndFunctionNamesTendToBeLongEnoughAsItIs(); as_others_have_said_consistency_is_the_important_thing_here_so_chose_whatever_you_think_is_more_read();
snake_case
表格更易于阅读。尤其是简短的单词(1-2个字母),我肯定会说是这样。至于“难于输入”,用lotsOfMixedCaseWithinIt输入单词也不是很方便。我主张这是您习惯的问题。但是在Java中,我说的是JLS / etc建议的“使用通用格式”。在Ruby / Python / C中,使用蛇形大小写。依此类推...
规则:
我不认为使用_或m_来表示成员变量在Java或任何其他语言中都是不好的。我认为它可以提高代码的可读性,因为它使您可以查看代码段并快速从本地变量中识别出所有成员变量。
您也可以通过强制用户在实例变量前加上“ this”来实现此目的,但是我发现这有点过分苛刻。它在许多方面违反了DRY,因为它是一个实例变量,为什么还要对其进行两次限定。
我自己的个人风格是使用m_而不是_。原因是还有全局变量和静态变量。m _ / _的优点是可以区分变量范围。因此,您不能将_重用于全局或静态,而是分别选择g_和s_。
在变量前面使用'm_'或'_'可以更轻松地在整个对象的方法中发现成员变量。
作为附带好处,键入'm_'或'_'将使智能首先弹出它们;)
if (itsEmail.equals(email))
private int _my_int;
public int myInt;? _my_int? )
-尽管我喜欢它的_style并认为它是可读的,但我发现它可能比它的价值还要麻烦,因为它不常见,而且很可能与您使用的代码库中的其他内容都不匹配。
-自动化的代码生成(例如eclipse的生成getter,setter方法)不太可能理解这一点,因此您必须手工或用eclipse对其进行修复以使其能够被识别。
最终,您将与(java)世界的其他偏好相抵触,并且可能对此感到有些烦恼。而且,正如先前的海报所提到的那样,代码库的一致性胜过上述所有问题。
在过去,使用下划线被认为是不好的风格是有原因的。当运行编译器负担不起的费用,并且监视器带有惊人的320x240像素分辨率时,通常很难区分_name
和__name
。
它是编码风格的融合。一种思想是在私人成员的前面加上下划线以区别他们。
setBar( int bar)
{
_bar = bar;
}
代替
setBar( int bar)
{
this.bar = bar;
}
其他人将使用下划线指示临时局部变量,该局部变量将在方法调用结束时超出范围。(我觉得这没用-一个好的方法不应该花那么长时间,并且声明就在这里!所以我知道它超出了范围)编辑:上帝禁止这个学校的程序员和memberData学校的程序员合作!真是地狱。
有时,生成的代码会将变量以_或__开头。这个想法是没有人会这样做,所以很安全。
人们这样做的原因(以我的经验)是区分成员变量和函数参数。在Java中,您可以拥有这样的类:
public class TestClass {
int var1;
public void func1(int var1) {
System.out.println("Which one is it?: " + var1);
}
}
如果您使成员变量_var1或m_var1,则函数将不会有歧义。
所以这是一种风格,我不会认为它不好。
就个人而言,我认为一种语言不应制定有关编码风格的规则。这是喜好,用法,便利性和可读性的概念。
现在,一个项目必须设置编码规则,以确保清单之间的一致性。您可能不同意这些规则,但是如果您想做出贡献(或在团队中工作),则应该坚持使用这些规则。
至少,像Eclispe的IDE是不可知的,允许像变量前缀或后缀,各种风格的大括号布局和空间管理等方面制定规则,以你可以沿着用它来重新格式化代码的指导方针。
注意:我属于那些遵循C / C ++习惯的人,在Java中用成员变量的m_前缀(对于静态变量用s_)编码Java,用初始b前缀布尔值,在函数名中使用大写字母并对齐括号。 .. Java原教旨主义者的恐怖!;-)
有趣的是,这是我工作时所使用的约定……可能是因为最初的主要开发人员来自MFC世界!:-D
这只是您自己的样式,没有不好的样式代码,也没有什么好的样式代码,只是将我们的代码与其他代码区分开。