匈牙利符号的目的是嵌入语义注释
- 不能以其他方式在语言中表达,尤其是类型系统和
- 从上下文中看不出来
在变量名中。现在,由于 Perl 没有静态类型系统,看起来匈牙利符号应该相当普遍。但是,以匈牙利符号的价值为例:跟踪不受信任数据的来源。
匈牙利表示法的一个经常被引用的例子是在应用程序中的所有字符串变量前面加上sor u(用于安全和不安全),这取决于字符串是来自受信任的来源(或已被清理)还是来自不受信任的来源。但是:只需将unsafe替换为tainted,您就可以完美地描述 Perl 中的 tainting。因此,在这种情况下,即使 Perl 没有静态类型系统,它也有一个动态的允许您在语言中表达受信任/不受信任的语义的类型系统,因此匈牙利符号是多余的。(即使在没有内置支持污染的语言中,通常也有更好的方法,例如子类型(Python、Ruby、Smalltalk,...),注释/属性(Java,C#,...),元数据(Clojure,...)和静态类型(Haskell,ML,...)。)
此外,Perl 非常具有表达力,因此将变量的整个上下文保留在您的脑海中(或在一屏代码中)要容易得多,因此,语义从周围的代码中通常是显而易见的。
当然,好的命名也有帮助。
请记住:匈牙利符号是为 C 发明的,它没有表现力,并且具有静态类型系统,其几乎唯一的用途是作为笑话的妙语。