Does it make sense to use Hungarian notation prefixes in interpreted languages?
首先,为了避免重复的问题,我看了下面的文章。
https://stackoverflow.com/questions/1184717/hungarian-notation/匈牙利语为什么我不应该使用"匈牙利符号"?变量前缀("匈牙利符号")是否真的需要?人们在现实世界中使用匈牙利命名约定吗?
现在,所有这些帖子都与C语言、C++、Java强类型语言有关。我确实理解,在编译前已知类型时,不需要前缀。不过,我的问题是:
考虑到在运行时之前看不到对象的类型,在基于解释器的语言中使用前缀是否值得?
编辑:如果有人能把这篇文章变成社区维基,请这样做。我对这篇文章的声誉(或负面声誉)几乎不感兴趣。
这取决于您所指的两个版本中的哪一个:
如果要使用"real",则使用匈牙利原始符号aka applications匈牙利符号,表示逻辑变量类型resp。它的目的,请随意这样做。
"被误解"的版本,也就是系统匈牙利表示法,只表示物理变量类型是不允许使用的。
imho,使用系统匈牙利语(在数据类型前加前缀)从来没有意义。您可以使用静态语言或动态语言,但编译器或解释器都会处理类型系统。通过变量名来注释变量类型只能导致歧义(例如,想象一个名为
在应用匈牙利语方面,它是完全不同的,即使用某种使用模式进行前缀。我认为使用这种表示法是一种良好的实践,例如"usvalue"表示不安全(即未验证)的值。这提供了一个关于用法的视觉提示,并防止您混合使用不同类型但不打算一起使用的变量(或者当它们打算一起使用时,您至少对正在使用的内容有了一个概念,它们会在代码检查雷达上产生一个点)。
我经常在matlab中使用这样的东西,例如
同样,对于迭代器:我经常使用多维数组(例如4d),在奇数情况下,我在维度上运行
除此之外,我经常使用
虽然在技术上做
(*)唯一有意义的时刻是,您的完整框架/语言要求您使用它。例如,win32 api使用它,因此当您直接与之交互时,您应该使用这些标准来将混淆降到最低。然而,我认为寻找另一种框架/语言可能同样有意义,甚至更有意义。
请注意,这与Perl中使用的sigils、一些基本方言等不同。它们也传递类型,但在许多实现中,这是类型定义,因此不可能有或很少的歧义。另外一个问题是,使用这种类型声明是否是一种良好的实践(我不确定自己在这方面的立场)。
在python中不赞成匈牙利符号传送类型("Systems Hungarian")的原因很简单。这是误导。一个变量可能被称为
这种表示法的目的是帮助您跟踪静态类型语言中的变量类型,并且在一段时间内可以说是有用的。但是现在它已经过时了,即使对于静态类型的语言,考虑到IDES的可用性,它可以以更好的方式完成工作。
正如它被提出的,匈牙利符号是一个合理的想法。当它被应用时?它应该在轨道上被撞击(这是唯一可以确定的方法)。
您链接到的第一个问题的公认答案同样适用于python:
Hungarian notation has no place in Java. The Java API does not use it, and neither do most developers. Java code would not look like Java using it.
所有这些对于Python也是一样的。