这个问题是寻找匈牙利表示法的好例子,所以我们可以把这些集合汇集在一起.
编辑:我认为,匈牙利的类型是不是必要的,我希望更具体的例子,其中它增加了可读性和可维护性,像乔尔给出了他的文章(按我的答案).
要求匈牙利表示法的好例子的问题在于,每个人都会对自己的好例子有自己的看法.我个人的看法是,最好的匈牙利命名法是无匈牙利表示法.符号最初用于表示变量的预期用法而不是其类型,但它通常用于类型信息,特别是对于Form控件(例如,txtFirstName用于某人的名字的文本框).这使得代码在可读性(例如,"prepIn nounTerms prepOf nounReadability")方面的可维护性较低,并且在需要更改类型时进行重构(Win32 API中的"lParams"已更改类型).
您可能应该考虑不使用它.例子:
strFirstName - 这可以只是firstName,因为它很明显它的用途,类型并不重要,在这种情况下应该很明显.如果不是很明显,IDE可以帮助您.
txtFirstName - 这可以更改为FirstNameTextBox或FirstName_TextBox.它读得更好,你知道它是一个控件而不仅仅是文本.
CAccount - C用于MFC中的类名,但你真的不需要它.帐户足够好.大写名称是类型的标准约定(它们只出现在特定的位置,因此它们不会与属性或方法混淆)
ixArray(数组的索引) - ix
有点模糊.尝试arrayIndex.
usState(State的不安全字符串) - 看起来像"US State".最好使用状态_
UnsafeString或其他东西.甚至可以将它包装在UnsafeString类中,至少使其类型安全.
正如其他匈牙利帖子中提到的那样,现在的经典文章是来自Joel网站的文章:
http://www.joelonsoftware.com/articles/Wrong.html
(用于指针).它几乎是我使用的唯一前缀.我认为它为变量增加了很多(例如它的指针),所以应该更加尊重它.
数据类型的匈牙利语有点过时IDE现在可以告诉你类型是什么(仅在几秒钟内悬停在变量名称上),所以它不那么重要.但是将指针视为数据并不好,所以你要确保它对用户来说是显而易见的,即使他在编码时做出假设他也不应该这样做.
Ť
污染的数据.对来自不受信任来源的所有数据进行前缀,以使该变量成为受污染的变量.在对其进行任何实际工作之前,应清除所有受污染的数据.
使用匈牙利语来表示类型是没有意义的,因为编译器已经为你做了.
匈牙利语有用的地方是区分具有相同原始类型的逻辑上不同类型的变量.例如,如果使用整数来表示坐标,则可以在x坐标前加x,y坐标为y,距离为d.所以你会有类似的代码
dxHighlight = xStart - xEnd
yHighlight = yLocation + 3
yEnd = yStart + dyHeight
dyCode = dyField * 2
等等.这很有用,因为你可以一目了然地发现错误:如果你添加一个dy,你总会得到一个y.如果你减去两个x,你总是得到一个dx.如果你将dy乘以标量,你总会得到一个dy.等等.如果你看到像这样的一条线
yTop = dyText + xButton
你知道这是错误的,因为添加dy和ax是没有意义的.编译器无法为您捕获这个,因为就它所知,您正在向int添加一个int,这很好.
不要使用特定于语言的前缀.
我们用:
n: Number p: Percentage 1=100% (for interest rates etc) c: Currency s: String d: date e: enumeration o: object (Customer oCustomer=new Customer();) ...
我们对所有语言使用相同的系统:
SQL C C# Javascript VB6 VB.net ...
这是一个救生员.
Devil's Advocate:匈牙利表示法的最好例子就是不使用它.:d
使用现代IDE的匈牙利符号我们没有任何好处,因为他们知道类型.它在重构变量的类型时添加了工作,因为名称也必须被更改(大多数情况下,当你处理变量时,你知道它是什么类型).
您还可以使用符号来订购问题.如果你使用p作为指针而使用地址,你可以调用变量apStreet或paStreet吗?当你没有一致性时,可读性会降低,当你必须记住你必须写下符号的顺序时,你必须耗尽宝贵的思维空间.
我发现匈牙利符号有时在动态语言中很有用.我特别想到Server Side Actionscript(基本上只是javascript),但它可以应用于其他地方.由于根本没有真正的类型信息,匈牙利语符号有时可以帮助使事情更容易理解.