Questions tagged «refactoring»

重构是一种用于重组现有代码,更改其内部结构而不更改其外部行为的严格技术。关于堆栈重构的开放式问题对于Stack Overflow来说是没有意义的,但是它们可能适合代码审查。

23
重构具有太多(6+)参数的方法的最佳方法是什么?
有时候,我会遇到参数数量不合理的方法。通常,它们似乎是构造函数。似乎应该有一个更好的方法,但是我看不到它是什么。 return new Shniz(foo, bar, baz, quux, fred, wilma, barney, dino, donkey) 我曾考虑过使用结构来表示参数列表,但这似乎只是将问题从一个地方转移到另一个地方,并在过程中创建了另一种类型。 ShnizArgs args = new ShnizArgs(foo, bar, baz, quux, fred, wilma, barney, dino, donkey) return new Shniz(args); 因此,这似乎不是一种改善。那么最好的方法是什么?
102 refactoring 

11
有人可以解释删除(或保留)未使用代码的优点吗?
我多次听到必须从项目中删除未使用的代码。但是,对我来说“为什么?”还不清楚。 我不删除的观点是: 代码已经写好了,花了很多力气 可以在合成环境和实际环境中测试代码 如果组织得当(分组,单独的软件包,松散耦合的等等),它不会影响您的整体代码分析或重构 将来可能会使用代码 删除后,作者可能会感到不舒服 有人可以解释删除(或保留)未使用代码的优点吗?
102 refactoring 

1
使用ReSharper将方法提取到已经存在的界面
我正在向实现接口的类中添加新方法,并且我喜欢使用“提取接口”重构,只需将方法添加到接口中即可。但是ReSharper似乎不支持向现有接口添加方法签名。 感觉好像我缺少什么,我敢肯定它可以通过某种方式完成。也许我应该先将方法签名添加到接口中,但这有时就是我的工作方式。我是否缺少某些快捷方式,功能或使用ReSharper错误?

14
在Vim中重构
当然,对于许多人而言,可以在IDE上进行重构的事实是无价的,我在编码时几乎不会这样做,但是在编辑其他人的源代码时可能会尝试这样做。如何在Vim中的多个文件中完成如此琐碎的任务? 我找到了用于重构Ruby的插件,但是“任何”语言怎么样?
98 vim  refactoring 

7
在Vim中更改变量名
我试图通过Vim阅读很多C / Perl代码,其中包含许多单字母变量名称。 最好有一些命令可以帮助我在读取代码的过程中将变量名更改为更有意义的名称,以便可以更快地读取其余部分。 Vim中有一些命令可以让我快速执行此操作吗? 我认为正则表达式不起作用,因为: 同一单个字母名称在不同作用域中可能具有不同的用途 相同的字母组合可能是另一个较大的var名称的一部分,或者是字符串或注释中的内容...不想修改这些字母 任何已知的解决方案?

30
您使用什么C#ReSharper 4+实时模板?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 您使用什么C# ReSharper 4.0模板? 让我们以以下格式分享这些内容: [标题] 可选说明 快捷方式:快捷方式 可用于: [AvailabilitySetting] // Resharper template code snippet // comes here 宏属性(如果存在): Macro1-值-EditableOccurence Macro2-值-EditableOccurence 请每个答案一个宏! 以下是一些NUnit测试装置和独立NUnit测试用例的示例,这些示例以建议的格式描述了实时模板。

5
Visual Studio 2015中缺少重构菜单
我在Visual Studio 2015中找不到右键单击上下文菜单时遇到问题。我知道我的项目或正在处理的文件没有问题。我可以在Visual Studio 2013中找到右键单击上下文重构菜单。但是,在Visual Studio 2015中,右键单击上下文菜单中没有重构上下文菜单。 去哪了 我该如何找回? 您的建议不能包含菜单编辑→重构。 我尝试使用菜单工具→导入和导出设置将我的Visual Studio设置重置为默认设置,但这也没有使菜单恢复。

16
Ctrl + R,Ctrl + R命令不起作用
我试图在Visual Studio 2008中使用Ctrl+ R,Ctrl+R命令重命名变量。我在底部收到一条错误消息,说 “键组合(Ctrl+ R,Ctrl+ R)绑定到当前不可用的命令(&Rename ...)。” 我没有运行它,也没有想到可以阻止修改文件的任何操作,F2命令允许重命名。有人知道怎么修这个东西吗? 编辑:我确实安装了Resharper,但是以前能够使用相同的设置来执行此操作,最近我迁移了计算机。

8
在C#中替换多个字符串元素
有没有更好的办法做到这一点... MyString.Trim().Replace("&", "and").Replace(",", "").Replace(" ", " ") .Replace(" ", "-").Replace("'", "").Replace("/", "").ToLower(); 我已经扩展了字符串类,以将其简化为一项工作,但是有一种更快的方法吗? public static class StringExtension { public static string clean(this string s) { return s.Replace("&", "and").Replace(",", "").Replace(" ", " ") .Replace(" ", "-").Replace("'", "").Replace(".", "") .Replace("eacute;", "é").ToLower(); } } 只是为了好玩(并停止评论中的论点),我已提拔要点,对以下各种示例进行基准测试。 https://gist.github.com/ChrisMcKee/5937656 regex选项的得分非常高;字典选项出现最快;stringbuilder replace的长发版本比短手稍快。

6
在IntelliJ中重新排序Java类的方法的简单方法?
与手动剪切和粘贴代码相比,在IntelliJ中有没有更简单的方法来对类源文件中的方法进行重新排序?如今,在重构遗留代码时,我经常需要这样做,例如,使相关方法在源代码中彼此靠近。 在Eclipse AFAIK中,有一个类似于IntelliJ的“结构”视图的视图,我可以在其中拖放方法。但是,这在IntelliJ中不起作用,我也从其帮助中找不到任何提示。 我使用的是IntelliJ 9.0.2。

10
什么是重构,什么仅是修改代码?
我知道重构就是“改变程序的结构,以使功能不变”。我正在与一些正在大学里参加我的最后一个项目的家伙交谈,我很惊讶他们对重构的看法更加宽泛(需要一个更好的词)。 我认为重构就是诸如提取方法和重命名类之类的事情。他们还提出了一些建议,例如更改数据结构(例如将JavaLinkedList更改为ArrayList),更改算法(使用合并排序而不是冒泡排序),甚至重写大量代码作为重构。 我非常确定他们错了,但是我不能给出一个很好的理由,因为他们的建议确实改变了程序(并且可能使程序变得更好)而没有改变其行为。我是对的,更重要的是,为什么?


8
如何处理“有符号/无符号不匹配”警告(C4018)?
我使用大量用C ++编写的计算代码,同时考虑了高性能和低内存开销。它大量使用STL容器(大部分是vector),并且几乎在每个函数中都对该容器进行迭代。 迭代代码如下所示: for (int i = 0; i < things.size(); ++i) { // ... } 但它会产生有符号/无符号不匹配警告(在Visual Studio中为C4018)。 int用某种unsigned类型替换是一个问题,因为我们经常使用OpenMP编译指示,并且要求计数器为int。 我将禁止显示(数百个)警告,但是恐怕我错过了一些优雅的解决方案。 关于迭代器。我认为,迭代器在适当的地方使用时很棒。我正在使用的代码将永远不会将随机访问容器更改为list某种东西(因此进行迭代int i已经与容器无关),并且将始终需要当前索引。而且,您需要键入的所有其他代码(迭代器本身和索引)只会使事情变得复杂,并且混淆了底层代码的简单性。
80 c++  refactoring 


15
PHP代码重构工具
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 6年前关闭。 改善这个问题 是否有任何工具支持重构PHP代码(重命名变量,提取方法,查找方法引用等)?谢谢。
74 php  refactoring 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.