1

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

4

3 回答 3

6

在 30 多年的 Fortran 编程中,我从未遇到过使用匈牙利符号的人。您的朋友可能会混淆 Fortran 长期以来(现在已弃用)根据名称的首字母隐式键入变量的能力。但这早在人们对现在所谓的匈牙利符号的广泛认识之前就已经存在了。

关于在编写 Fortran 时匈牙利表示法是否是或将是采用的好主意这一更普遍的问题,我同意 David,并且(我认为)更广泛的软件开发社区认为它是一种不太有用的做法. Fortran 当然不需要它,变量(和其他)名称遵循与许多编程语言中的规则非常相似的规则。

于 2012-05-13T21:40:34.897 回答
5

系统匈牙利语

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

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

对 HN 的最大批评(除了它在强类型语言中的好处有限之外)是使用的类型前缀会导致变量名极其模糊和混乱,因此虽然您可能会获得一定程度的伪类型安全性,但您可能会失去代码的清晰度(或至少创建只有成为约定专家才能阅读的代码),这可能会损害可维护性。

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


应用程序 匈牙利语

针对第一条评论,还有另一种形式的匈牙利符号(Apps Hungarian)。有关它的更深入描述,请参见 Wikipedia,但本质上它将与变量的使用用途相关的信息与其名称相关联,而不是其类型

在强类型语言中,这是一种更有用的方法,非常值得考虑 - 或者至少在概念上(恕我直言)。我发现选择的前缀往往相当复杂和不友好(例如rwrow在我看来,只是混淆了前缀而没有任何实际收获)。我也认为许多例子是毫无意义的(例如str,表明一个变量是一个字符串,在许多语言中是多余的,因为字符串通常只以一种形式表示,并且如果变量被合理命名(“UserName”而不是“Data” ) 通常很明显它将是一个字符串)。


现代替代方案

在我看来/经验中,通常重要的是澄清变量之间的一些关键区别(例如,我们需要以完全不同的方式对待成员、指针、易失性和常量 - 将成员和参数混合或用错误索引数组index 变量可能是灾难性的,现代编译器几乎没有保护我们免受这些错误的影响)。如果使用合理的描述性变量命名,列表和字符串之间的区别通常很明显,并且类型安全语言会告诉我们是否混合了这些类型,因此我们不需要前缀。这导致了我自己的极其简单的前缀方法,这在我对这个堆栈溢出问题的回答中进行了解释。

希望这篇文章可以让您在决定前缀是否对您有益时有所思考。最终,您应用的任何前缀方案都必须是您认为(或者更好,可以证明)对您和您的团队有益的东西。不要只是遵循别人的方案——想想前缀如何以及为什么有用,并在采用或丢弃它之前客观地评估它。

于 2012-05-13T21:41:14.787 回答
2

它实际上更多地取决于开发环境和团队标准,而不是语言。如果您碰巧在使用 Fortran,但在具有代码分析和导航功能的良好 IDE 中,那么您可能不需要 Hungarian Notation。

我认为要问自己的真正问题是,“匈牙利符号会给我什么?”

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

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

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

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

简而言之,如果您在price整个应用程序中都有一个名为 used 的全局变量,那么调用它dblPrice来表明它是一个双精度变量会为变量名称添加有用的信息。但是有更有意义的方法来添加有用的信息。 price首先,对于大范围变量来说,这是一个糟糕的名称,如果可能的话,范围可能会变窄。

于 2012-05-13T21:29:03.013 回答