当前位置:  开发笔记 > 编程语言 > 正文

是否真的有必要的前缀("匈牙利表示法")?

如何解决《是否真的有必要的前缀("匈牙利表示法")?》经验,为你挑选了7个好方法。

由于C#是强类型的,我们真的需要为变量添加前缀吗?

例如

iUserAge
iCounter
strUsername

我以前曾经用过前缀,但是前进我看不出任何好处.



1> Joel Coehoor..:

变量前缀(匈牙利语)真的有必要吗?

没有!

实际上,微软自己的风格指南(实践起源于此)现在建议不要使用它.特别是,请参阅" 常规命名约定"一节,其中包括以下文本(粗体,不少):

不要使用匈牙利表示法.


公平地说,MS样式指南对于大型部件是任意的,因此不是有用的参考点.
从什么时候开始,MS中的一些指导作者才是最后一个词?确定的标准是好的,但不是在具体的标准.就在今天,我正在编写`iaWhichDose`,因为我想要的东西清楚地表明它是一个"剂量"索引的整数数组,而`iCat`清楚地表明它是一个类别的索引.这个名字告诉我它意味着什么,没有得到真正的冗长.通过禁止它实现了什么呢?

2> Dan C...:

我认为唯一适合弯曲标准和前缀变量的地方:

控制名称:txtWhatever- 我看到我不是唯一的一个.好处是你可以在txtName旁边找到像lblName这样的东西,你不需要进入NameLabel/NameTextBox方向.

类成员变量:_whatever.我已经尝试了m_和没有前缀,结果是简单的下划线.m_更难以打字,并且没有前缀有时会让人感到困惑(特别是在维护期间,我知道你们所有人都在编写代码时心里明白他们的代码)

我没有找到任何一致的情况,其中为变量添加其类型前缀会使代码更具可读性.

编辑:我确实阅读了Microsoft指南.但是我认为在适当的情况下允许编码样式发展和/或"弯曲".正如我上面提到的,我发现使用下划线前缀对试验和错误有用,并且肯定比使用它更好.无论代码中的任何地方.

支持"不断发展"的理论 - 回到.NET 1.x,当微软发布编码指南时,他们建议使用Camel套管来处理所有事情,甚至是常量.我现在看到他们已经改变并建议使用Pascal案例用于常量或公共只读字段.

此外,甚至.NET Framework类库目前还充满了m_和_和s_(尝试使用Reflector浏览实现).毕竟,只要在整个项目中保持一致性,就由开发人员决定.



3> scobi..:

如果匈牙利语的意思是"带有类型缩写的前缀",例如uCount或pchzName,那么我会说这种做法很糟糕,幸好似乎正在逐渐淡化常用.

但是,我仍然认为前缀对范围非常有用.在我的工作室,我们使用此约定为变量添加前缀:

i_  // input-only function parameter (most are these)
o_  // output-only function parameter (so a non-const & or * type)
io_ // bidirectional func param
_   // private member var (c#)
m_  // private member var (c++)
s_  // static member var (c++)
g_  // global (rare, typically a singleton accessor macro)

我发现这非常有用.特别是func参数前缀是有用的.在函数内部,您可以随时了解var的来源.通常,当我们想要修改或更改其含义时,我们会将var复制到另一个.

简而言之:现代工具不需要类型的前缀.IDE负责为您识别和检查这些内容.但基于范围的前缀对于可读性和清晰度非常有用.

Intellisense也有很多有趣的好处.您可以键入i_ ctrl-space并获取func的所有输入参数以供选择.或者g_ ctrl-space来获取你所有的单身人士.这是节省时间的.



4> Andrew Cowen..:

不.难道我们永远需要?



5> Joe Ratzer..:

匈牙利表示法很难看.唯一的例外是接口,大多数人认为它是可以接受的.

Linus总结得很好:"将函数的类型编码到名称中(所谓的匈牙利符号)是脑损坏的 - 编译器无论如何都知道类型并且可以检查这些类型,它只会让程序员感到困惑"



6> Hates_..:

不.匈牙利表示法只会给代码增加不必要的噪音,并且在编译器类型检查时是多余的.



7> thursdaysgee..:

是的,如果使用匈牙利符号,原来的意思是,而不是微软实施的.与上面的示例非常相似,它将文本框和相应的标签显示为lblWhatever,txtWhatever.用它来定义变量的使用,而不是类型.它可以提供信息,知道您的号码是moneyTotal,这不仅告诉我数据类型.

但是,如常用?没有.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有