Fortran中的匈牙利表示法

时间:2012-05-13 21:17:32

标签: fortran hungarian-notation

它被认为是好的还是坏的做法?我的一位朋友告诉我,一般来说,现在大多数语言都不被认为是好习惯,但是他认为他听说这不是fortran的情况。这是真的?如果是真的,为什么?

3 个答案:

答案 0 :(得分:6)

在Fortran的30多年编程中,我从未遇到任何使用匈牙利符号的人。您的朋友可能会混淆Fortran长期(现已弃用)的能力,根据其姓名的首字母隐式输入变量。但是,很久以前人们普遍意识到现在所谓的匈牙利符号。

关于匈牙利符号在撰写Fortran时是否或将会是一个好主意的更普遍的问题,我同意David,并且(我认为)更广泛的软件开发社区认为它不是非常 - 有用的练习。 Fortran肯定不需要它,变量(和其他)名称遵循与许多编程语言非常类似的规则。

答案 1 :(得分:5)

匈牙利系统

Systems Hungarian表示法基本上将 type 信息添加到变量名称中,以便您了解所使用的值的类型,并且不太可能以不正确的方式使用值。这在现代强类型语言中具有可疑的好处,因为类型安全性显着降低了错误地使用/访问变量的机会。

但是,对于不太强类型的语言,包括这类信息可能是有益的,因为它使程序员不断了解他们正在处理的数据。

对HN的最大批评(除了它在强类型语言中有限的好处)是使用的类型前缀可能导致极其模糊和混淆的变量名称,所以虽然你可以获得一定的伪类型安全性,您可能会在代码中失去清晰度(或者至少创建只能在您的约定中可读的代码),这可能会损害可维护性。

如果您需要为其他人的命名约定生成代码,那么您别无选择,但如果您掌控,您可以定义一个明智,清晰,简单的命名约定,可以更好地满足您的需求,在两者之间取得良好的平衡使变量名称信息丰富,并引入混乱的混乱。例如,一种做法是以IsOpen而不是Open的形式命名布尔变量,以避免在可用作动词和名词的单词之间产生混淆。它还可以让您轻松查看何时将布尔值混合为整数或浮点表达式。这种方法也很直观,因此无需任何程序员能够阅读和理解代码的特殊知识。


Apps匈牙利语

在回应第一条评论时,还有另一种形式的匈牙利表示法(Apps Hungarian)。有关它的更深入描述,请参阅维基百科,但实质上它将与变量的用法目的相关的信息与其名称相关联,而不是与相关联。输入

在强类型语言中,这是一种更有用的方法,值得考虑 - 或至少(恕我直言)的概念。我发现选择的前缀通常往往相当复杂和不友好(例如rw而不是row我认为只是模糊前缀而没有任何实际的好处)。我还认为很多例子都是毫无意义的(例如str表示变量是一个字符串,在许多语言中都是多余的,因为字符串通常只用一种形式表示,如果变量名称合理(“UserName”)而不是“数据”)它通常很明显,它将是一个字符串)。


现代选择

在我看来/经验中,通常重要的是澄清变量之间的一些关键差异(例如,我们需要对待成员,指针,挥发物和常量彼此完全不同 - 混合成员和参数或索引数组使用错误的索引变量可能是灾难性的,而现代编译器对保护我们免受这些错误的影响很小。如果使用合理的描述性变量命名,则列表和字符串之间的区别通常是显而易见的,并且类型安全语言将告诉我们是否将这些类型混合起来,因此我们不需要这些情况的前缀。这导致了我自己非常简单的前缀方法,这在我对this stack overflow question的回答中进行了解释。

希望这篇文章在决定前缀是否对您有益时可能会给您一些思考。最终,您应用的任何前缀方案都需要是您认为(或更好,可以证明)对您和您的团队有益的事情。不要只关注别人的计划 - 考虑前缀如何以及为什么有用,并在采用或丢弃它之前客观地评估它。

答案 2 :(得分:2)

这实际上更多地取决于开发环境和团队标准而不是语言。如果您碰巧使用的是Fortran,但是在一个带有代码分析和导航的良好IDE中,那么您可能不需要匈牙利表示法。

我认为问自己的真正问题是,“匈牙利记谱法会给我什么?”

那就是它的价值是什么?即使使用旧语言,您仍然可以应用良好的编码实践和技术。保持例程小,保持变量范围小等等。现在,我不是Fortran的专家,所以我不知道有什么限制。但我想它仍然适用。

匈牙利表示法在您使用有限编辑器时(例如,当鼠标悬停时没有关于变量的信息),当您的变量具有相当长的使用寿命时,匈牙利表示法特别有用。我的意思是变量的使用继续超出其定义。

自从很久以前Fortran成立以来,我们作为一个行业已经学到很多关于组织代码和在开发团队中有效工作的知识。 (即使团队只是你......请记住,您在几个月之前编写的任何代码也可能是由其他人编写的。)您可以将这些课程应用到您的Fortran代码中。

使用信息丰富的变量名称。存储并不昂贵,字符不再需要很长时间才能通过调制解调器发送...合理长的变量名称既可接受又鼓励,只要它们传达有关变量 装置。另外,保持变量的使用接近其定义。因此,周围代码的附加上下文揭示了有关变量的更多信息,而不仅仅是其名称。

简而言之,如果你在整个应用程序中使用了一个名为price的全局变量,那么调用它dblPrice来表示它是一个double,它会为变量名添加有用的信息。但是有更有意义的方法来添加有用的信息。 price首先是大范围变量的名称,如果可能,范围可能会变窄。