每当我编程时,我似乎都会积累很多"垃圾"代码,这些代码不再使用。只是为了保持我的代码整洁,并避免进行任何昂贵和不必要的计算,有没有一种简单的方法来判断是否有代码未被使用?
对您有所帮助的基本原则之一是尽可能降低所有内容的可见性。如果某个类可以是私有的,请不要将其设为默认、受保护或公共。这同样适用于方法和变量。当您可以确定某些内容是否未在类外使用时,这要容易得多。在这种情况下,即使是像Eclipse和IntelliJ Idea这样的IDE也会建议你未使用的代码。
在开发和重构代码时使用这种做法是自信地清理未使用代码的最佳方法,而不会破坏应用程序。即使在使用反射的情况下,这也将有助于。
这在Java中很难做到,因为它是一种反射语言。(例如,您不能简单地寻找对某个类或函数的调用,因为反射可用于使用只能在运行时解析的字符串调用函数。
所以在完全笼统的情况下,你不能确定。
如果你对代码库有足够的单元测试,那么冗余代码的可能性不应该成为引起关注的原因。
我认为"未使用的代码"是指在运行时始终不执行的代码。我希望我正确解释了你。
对此进行简单检查的方法非常简单。只需使用IntelliJ IDEA来编写代码。它会告诉你代码中永远不会被执行的部分,以及代码可以简化的部分。例如
if (x == 5) {
}
然后它会告诉你这个 if 语句是多余的。或者,如果您有以下情况:
return;
someMethod();
IDE 将告诉您永远无法达到someMethod()
。它还提供了许多其他很酷的功能。
但有时这还不够。如果你有怎么办
if (x == 5) {
someMethod();
}
但实际上在你的代码中,x
只能在 1 到 4 的范围内?IDE 不会告诉您有关此情况的信息。您可以使用通过运行大量测试来显示代码覆盖率的工具。然后,您可以看到代码的哪一部分未执行。
如果不想使用此类工具,可以在方法中放置断点。然后手动运行一些测试。当调试器单步执行代码时,您可以确切地看到代码的去向以及未执行的确切代码段。
执行此操作的另一种方法是使用 IDE 的查找/替换功能。检查您的某些公共/私有方法是否未在任何地方调用。例如,若要检查是否调用了 someMethod()
,请在整个项目中搜索someMethod
,并查看是否存在声明以外的匹配项。
但最有效的方法是,
首先停止编写这种代码!
我认为最好的检查方法是安装一个像 eclemma 这样的覆盖插件并创建单元和集成测试,以获得 100% 的代码覆盖率,完成您的使用代码/任务。不需要测试或在测试完成并运行后不传递的代码是您未使用的代码
首先尽量避免堆积垃圾。删除不再需要的东西。(您可以进行备份或更好地使用源代码管理系统。
您还应该为函数编写单元测试。因此,您知道删除某些内容后它是否仍然有效。
除此之外,大多数 IDE 都会向您显示未使用的局部变量和私有方法。
我确实想象过这样的情况,当你的应用程序开发了多年,你的某些部分功能不再使用,即使它们仍然在工作。示例:假设您在发生特定事件但不再发生时对内部系统进行了一些更改。
我会说您可以使用AspectJ获取此类数据/日志,然后在一段时间后进行分析。