在我一直在工作的公司中,我已经看到很多使用前缀来表示变量的范围或来源,例如m
用于类成员,i
用于方法实习变量和a
(或p
)方法参数:
public class User {
private String mUserName;
public String setUserName(final String aUserName) {
final String iUserName = "Mr " + aUserName;
mUserName = iUserName;
}
}
你怎么看?是推荐(或者确切地说不是)?我发现它在第一阶段非常难看,但是我使用它越多,我就越发现在使用大方法时它非常方便。
请注意我不是在谈论匈牙利符号,其中前缀表示类型而不是范围。
答案 0 :(得分:1)
我还曾在具有严格前缀表示法要求的商店工作,但过了一段时间,这变成了一种“气味”,代码已失控,全局变量从各处泄漏,表明代码/评论不佳。 / p>
Java的“这个”。符号是在本地引用字段的首选方式。变量的“m”前缀的使用被“Micro ..”公司推广为品牌噱头(他们甚至说“不要因为我们这样做而使用”)。
我遵循的一般规则是根据用于存储的内容命名变量。变量名只是一个别名。如果它存储用户名,则userName有效。如果是用户名列表,则userNames或userNameList有效。但是,我现在避免在变量名中包含“type”,因为类型经常更改(在实践中不应该是用户名的集合?等等......)
在一天结束时,如果变量名对您有用,可以记住代码在路上发生的事情,那么这可能是一个好主意。可维护性和可读性胜过“感知”效率和简洁语法,特别是因为现代编译器根据宏使用模式重写代码。
我希望这会有所帮助,我很乐意提供有关此处任何声明的更多细节。
PS。我强烈推荐这些类型的问题的Java风格元素。我曾经和作者一起工作,在风格方面他们都是天才!
答案 1 :(得分:0)
注意:您的问题是一个非常基于意见的问题(这些天通常在StackOverflow中不赞成使用),但是我仍然认为这是一个值得讨论的话题。
这就是我的观点,这是什么意思:
我个人认为,在编写和阅读代码时,变量名范围的指示符可能会有所帮助。一些例子:
此约定的流行程度因语言而异。我最经常在C ++和C语言中看到它。 Java有点频繁。在Python,Perl,Bash或其他“脚本”语言中不是很多。我想知道“高性能”代码与这种方案的收益之间是否存在某种关联。不过,也许只是历史的偶然。另外,某些语言的语法已经包含一些此类信息(例如Python的self.xxx
)。
我说不要理会任何类似“哦,微软为XYZ发明的东西,请忽略它”或“它看起来笨拙”的说法。只要有用,我就不在乎谁发明了它,或者为什么或它是什么样子(:
旁注:某些IDE可以为您提供范围信息(通过将鼠标悬停,进行特殊突出显示或其他方式),并且我可以理解,使用这种系统的人发现将这些信息放在变量名中是多余的。如果您的整个团队都使用这样的标准环境,那就太好了;也许您不需要命名方案。通常情况下,人与人之间会有一些差异,或者您的代码审查和差异工具可能没有提供类似的功能,因此,在很多情况下,将信息放入文本本身很有用。
在理想的世界中,我们将只有不使用大量变量的小函数,并且这样的命名前缀尝试解决的问题将不存在(或者小到不能保证“破坏”所有代码的问题)这样的方案只是为了改善一些极端情况。 但是我们并不生活在理想的世界中。
小功能很棒,但有时不切实际。您的算法可能具有无法用您的语言简洁表达的固有复杂性,或者您可能还有其他限制(例如性能或可用的开发时间)要求您编写“难看的”代码。由于上述原因,在这种情况下以及其他情况下,命名方案都可以提供帮助。
答案 2 :(得分:0)
具有变量命名约定对团队非常有用,并且IMO必须用于非字符串类型的语言。例如JScript。
在Jscript中,唯一的类型是“ var”,它基本上是在运行时评估的。在Jscript中,用预期包含在其中的数据类型来修饰变量变得更加重要。使用您的团队可以决定的一致前缀,例如s或str,或txt表示字符串,i / j / l / l / m / n表示整数(例如FORTRAN :-),q表示double,obj或o表示非原始数据,等等。除非变量名称清楚地表明了数据类型,否则不要使用没有任何前缀的变量名称。
例如
变量名“答案”是一个不好的名字,因为答案可以是文本或数字,因此它必须是 strAnswer或sAnswer,jAnswer,qAnswer等。
但是
“ messageText”或“ msgTxt”足够好了,因为很明显内容是一些文本。
但是将变量命名为“ dataResponse”或“ context”会造成混淆。
有时在服务器上需要修复或调试某些东西,并且在最坏的情况下,唯一的编辑器是vi或记事本nano / sed,在这种情况下,编辑器没有上下文帮助,制定编码约定确实会有所帮助。
如果遵循约定,则读取代码也更快。就像用前缀先生或女士来确定性别一样。帕特先生或帕特女士...当帕特本身不告诉帕特里克或帕特里夏的性别时...