在使用Java编写Swing时,我想到的一个问题是,它是Swing组件上的推荐还是“官方”/最常用的命名约定(前缀)。
例如(即使其他人可能更喜欢其他命名约定,这是我目前使用的):
然后我的名单结束..
我认为这样的前缀增强了我的代码的可读性,但是我没有任何组件的名称,例如JComboBox,JList,JRadioButton,JCheckButton,所以列表继续。
提前致谢。
答案 0 :(得分:19)
人们会告诉你使用前缀是不好的,因为那是匈牙利符号,而现在,匈牙利符号在编程中被认为是一个很大的禁忌。就个人而言,作为一个已完成一定数量GUI工作的人,我可以告诉你,在非GUI编程中绝对应该避免匈牙利符号,在做GUI时这是一个很好的做法。
例如,考虑一个带有文本框的简单表单,用于输入用户名。在此文本框前面应该是一个标签,提示用户在文本框中输入他的名字。现在,您如何命名文本框? '名称'?标签怎么样?
一个好的做法应该是在文本框前加上txt,并用label标记,这就是匈牙利符号的全部内容。因此,文本框现在命名为“txtName”,相应的标签名为“lblName”。这为您提供了在IDE编辑器中轻松访问文本框,组合框和其他小部件的额外好处。例如,如果您遵循这种表示法,在Eclipse中键入“txt”并按下CTRL + Space会打开一个列出所有文本框的上下文菜单。
现在,回答你的问题。定义用于前缀的三个字母的常用方法是从小部件的名称中删除所有元音以及所有重复的辅音。如果剩下三个辅音,则应忽略它们。因此,文本框(或TextField,或在您首选的小部件工具包中调用此小部件)变为'txt',标签'lbl',组合框'cmb',表'tbl'等等。
答案 1 :(得分:8)
我通常讨厌这种事情,因为它有点匈牙利符号。我不喜欢在变量名称中嵌入类型的想法,因为如果你改变类型,它不应该强制改变所有的变量名。
但是在Swing的情况下,我猜这是可以接受的。
一个好的IDE会为你生成变量名。为什么不放手呢?如果你坚持,我也会拼出这种类型(例如submitButton
而不是btnSubmit
)。击键很便宜。
答案 2 :(得分:5)
为什么不直接调用JTextField textField
,JButton button
,JLabel label
和JPanel panel
。花几个额外的字符来使变量读起来像英文单词一样糟糕吗?
此外,当我把类型放在变量名中时,我把它放在最后。因此,显示名称的JLabel为nameLabel
(IMO比lblName
更具可读性。)
此外,根据duffymo的建议,将类型放入变量名称是不好的做法。更好的方法是描述变量是什么。在名称标签的情况下,它是显示名称的UI组件。所以一个更好的名字可能是nameComponent
。 nameComponent
是JLabel或其他类型的事实是次要的,不应该混淆变量名。
答案 3 :(得分:5)