即使现在我也经常在 Java 变量和方法中看到下划线,例如成员变量(如“m_count”或“_count”)。据我记得,在这些情况下使用下划线被 Sun 称为坏风格。
唯一应该使用它们的地方是常量(例如“public final static int IS_OKAY = 1;”),因为常量应该全部大写而不是驼峰式。在这里,下划线应该使代码更具可读性。
你认为在 Java 中使用下划线是不好的风格吗?如果是(或不是),为什么?
即使现在我也经常在 Java 变量和方法中看到下划线,例如成员变量(如“m_count”或“_count”)。据我记得,在这些情况下使用下划线被 Sun 称为坏风格。
唯一应该使用它们的地方是常量(例如“public final static int IS_OKAY = 1;”),因为常量应该全部大写而不是驼峰式。在这里,下划线应该使代码更具可读性。
你认为在 Java 中使用下划线是不好的风格吗?如果是(或不是),为什么?
如果您现在没有使用它的代码,我建议您继续这样做。如果您的代码库使用它,请继续。
编码风格最重要的是一致性。如果您没有什么要一致的,那么语言供应商的建议可能是一个不错的起点。
sunDoesNotRecommendUnunderscoresBecauseJavaVariableAndFunctionNamesTendToBeLongEnoughAsItIs(); as_others_have_said_consistency_is_the_important_thing_here_so_chose_whatever_you_think_is_more_readable();
规则:
我不认为在 Java 或任何其他语言中使用 _ 或 m_ 来指示成员变量是不好的。我认为它提高了代码的可读性,因为它允许您查看代码片段并快速识别出本地变量的所有成员变量。
您也可以通过强制用户在实例变量前面加上“this”来实现这一点,但我觉得这有点苛刻。在许多方面它违反了 DRY,因为它是一个实例变量,为什么要对它进行两次限定。
我自己的个人风格是使用 m_ 而不是 _。原因是还有全局变量和静态变量。m_/_ 的优点是它区分了变量范围。所以你不能将 _ 用于全局或静态,而是分别选择 g_ 和 s_ 。
“坏风格”是非常主观的。如果某个约定适用于您和您的团队,我认为这将成为一种坏/好的风格。
回答您的问题:我使用前导下划线来标记私有变量。我发现它很清楚,我可以快速扫描代码并找出发生了什么。
(不过,我几乎从不使用“this”,除非是为了防止名称冲突。)
在变量前面使用“m_”或“_”可以更容易地在整个对象的方法中发现成员变量。
作为附带好处,键入“m_”或“_”将使智能感知首先弹出它们;)
这是Sun 对 Java 的建议的链接。并不是说你必须使用这些,甚至它们的库代码都遵循它们,但如果你从头开始,这是一个好的开始。像 Eclipse 这样的工具内置了格式化程序和清理工具,可以帮助您遵守这些约定(或您定义的其他约定)。
对我来说,'_' 太难输入了:)
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++ 的旧习惯的人之一,使用 m_ 为成员变量(静态变量为 s_)编写 Java 代码,为布尔值加上首字母 b,使用首字母大写字母作为函数名并对齐大括号。 .. Java 原教旨主义者的恐怖!;-)
有趣的是,这就是我工作时使用的约定...可能是因为主要的初始开发人员来自 MFC 世界!:-D
这只是你自己的风格,没有不好的风格代码,也没有好的风格代码,只是我们的代码与其他代码不同。