Coding style 摆脱匈牙利符号的最佳方法?

Coding style 摆脱匈牙利符号的最佳方法?,coding-style,refactoring,hungarian-notation,Coding Style,Refactoring,Hungarian Notation,假设您继承了一个C#代码库,它使用一个类和200个静态方法来提供核心功能(例如数据库查找)。在那门课上的许多噩梦中,大量使用匈牙利符号(糟糕的一种) 您会重构变量名以删除匈牙利符号,还是不使用它们 如果您选择更改所有变量以删除匈牙利符号,您的方法是什么?右键单击变量名,重构->重命名 VS插件也可以做到这一点,但内置方法对我来说很好。别管它。你的时间会得到更好的利用。我不会把它当作一个项目。我会使用VS中的重构工具(事实上,我会使用Resharper的,但VS的工作很好),并修复调用我修改的任何

假设您继承了一个C#代码库,它使用一个类和200个静态方法来提供核心功能(例如数据库查找)。在那门课上的许多噩梦中,大量使用匈牙利符号(糟糕的一种)

您会重构变量名以删除匈牙利符号,还是不使用它们


如果您选择更改所有变量以删除匈牙利符号,您的方法是什么?

右键单击变量名,重构->重命名


VS插件也可以做到这一点,但内置方法对我来说很好。

别管它。你的时间会得到更好的利用。

我不会把它当作一个项目。我会使用VS中的重构工具(事实上,我会使用Resharper的,但VS的工作很好),并修复调用我修改的任何方法中的所有变量。或者,如果我必须进行更大规模的更改,我会用任何我需要理解的方法重构变量名。

如果你感到幸运,只是想让匈牙利人离开,那么隔离使用的匈牙利前缀,并尝试在文件中搜索和替换,将其替换为零,然后进行清理和重建。如果错误数量很小,只需修复它。如果错误数量很大,请先返回并将其分解为逻辑(按域)类,然后分别重命名(IDE将有助于)

重构——我发现匈牙利符号在这种规模上确实会干扰代码的自然可读性,而这个练习是熟悉代码的一个好方法


但是,如果有其他团队成员知道代码库,您需要就重构达成一致意见,并且如果任何变量暴露在一个项目之外,那么您将不得不对它们置之不理。

如果您有删除和更改代码库的正当需要,我将使用内置重构工具,或者类似于再竖琴的东西


然而,我同意Chris Conway的某种观点,并问你为什么,是的,这很烦人,但同时,很多时候,“如果它没有坏,就不要修复它”的方法确实是最好的方法

早在VB6时代,我就很虔诚地使用它,但当VB.NET问世时,我就停止了,因为新的VB指南就是这么说的。其他开发者没有。所以,我们有很多旧代码。当我对代码进行维护时,我会从函数/方法/sub I touch中删除符号。我不会一次将其全部删除,除非您对所有内容都进行了非常好的单元测试,并且可以运行它们来证明没有任何问题

我该怎么办?假设我只需要维护代码,而不是以任何有意义的方式重写它别管它。当我添加代码时,使用现有的样式,也就是说,使用难看的匈牙利符号(就像我感觉的那样脏)


但是,嘿,如果你真的有一个hankerin'fer重构,那就一次做一点。每次处理它都要花十分钟重命名变量。把东西整理一下。几个月后,你可能会发现它像哨子一样干净……

你这样做能打破多少?这是一个要问你自己的重要问题。如果有很多其他代码使用该库,那么您可能只是通过重命名练习为人们(可能是您)创建工作

我把它列在重构时要做的事情清单上。至少每个人都希望你打破图书馆(暂时)


也就是说,我对命名不好的方法和变量感到非常失望,所以我可以联系起来。

只有在直接使用它时才能更改它。并确保您准备好了测试台,以确保它仍然有效。

我喜欢匈牙利符号。我不明白你为什么想要摆脱它。

我同意逐步淘汰匈牙利符号的最好方法是在修改代码时重构代码。进行这种重构的最大好处是,您应该围绕正在修改的代码编写单元测试,这样您就有了一个安全网,而不是交叉手指,希望不要破坏现有的功能。一旦你有了这些单元测试,你就可以随心所欲地修改代码了。

我想说一个更大的问题是你有一个包含200个(!)方法的类

如果这是一个非常依赖/变化很大的类,那么它可能值得重构以使其更可用

在这方面,Resharper是绝对必要的(您可以使用内置的重构功能,但Resharper要好得多)

开始寻找一组相关的方法,然后将它们重构成一个很好的小型内聚类。更新以符合您的最新代码标准

编译并运行您的测试套件

有精力做更多的事情吗?提取另一个类。
磨损-没有麻烦;明天再来多做一些。再过几天,你就可以征服野兽了。

我同意@Booji的观点——当你已经出于其他好的原因访问代码时,手动地、按常规执行。然后,你就可以把最常见的一种排除在外,谁会在乎其余的呢

我想问一个类似的问题,只是在我的情况下,冒犯的代码是我自己的。我有一个很老的习惯,从我的FoxPro时代起,我就一直使用匈牙利语的“坏习惯”(打字很差,范围也不常见)——这是我最近才戒掉的习惯


这很难——这意味着接受代码库中不一致的风格。就在一周前,我终于说了“去他妈的”,并开始使用一个没有字母“p”的参数名。我最初感觉到的认知失调已经让位于自由感。世界并没有走到尽头。

别忘了有两种匈牙利符号

最初的查尔斯·西蒙尼(Charles Simonyi HN),后来被称为App的匈牙利语和已故的
"" Hungarian notation conversion helpers
"" get rid of str prefixes and fix caps e.g. strName -> name
map ,bs /\Wstr[A-Z]^Ml3x~
map ,bi /\Wint[A-Z]^Ml3x~
"" little more complex to clean up m_p type class variables
map ,bm /\Wm_p\?[A-Z]^M:.s/\(\W\)m_p\?/\1_/^M/\W_[A-Z]^Mll~
map ,bp /\Wp[A-Z]^Mlx~