理解大型代码的问题以前已得到很好的解答.但是我觉得我应该再问这个问题来问我一直面临的问题.
我刚开始做学生工作.我是一名初学程序员,两个月前刚刚学习了课程.虽然在工作中,我已经交了一个代码,它是大软件的一部分.我理解该代码应该做什么(读取文件).但是在花了几周时间试图理解代码并对其进行修改以达到我们想要的结果之后,我得出结论,我需要理解该代码的每一行.代码大约是1300行.
现在,当我开始阅读代码时,我发现,例如,变量定义为:
VarType VarName
Run Code Online (Sandbox Code Playgroud)
现在VarType不是类型int或类型float.它是用户定义的类型,所以我必须去上课看看这个类型是什么.
在下一行中,我看到一个被调用的函数,如points.interpolate(x); 现在我必须进入另一个类,看看插值函数的作用.
这种情况发生了很多,这意味着即使我试图理解代码的一小部分,我也要去3或4个不同的类,并且一次性地记住它们而不会失去主要目标,这很难.
我可能不是一个熟练的程序员,但我希望能够做到这一点.我可以提出一些建议吗?
另外(当我问这个时,我听起来真的很愚蠢)什么是调试器?我希望这可以让你了解我的立场(以及再次提出这个问题的必要性).:(
运气好的话,这些功能和类应该至少有一些文档来描述它们的作用.你不需要做知道如何他们的工作,了解什么,他们做的.当你看到使用时interpolate,不要开始看它是如何工作的,否则你最终会深入搜索代码库.相反,请阅读其文档,这应该告诉您需要了解的一切,以了解使用它的代码.
如果没有文件,我觉得你.我可以建议两个提示:
从函数或类的名称,返回类型和参数以及使用它的周围代码做出一般性假设,直到某些事情发生与这些假设相矛盾.interpolate如果不了解它是如何工作的,我可以做出很好的猜测.这仅在函数或类的名称足够自我记录时才有效.
如果您需要深入了解某些代码的工作原理,请从底部开始向上工作.这样做意味着当您搜索代码库时,您最终不必记住您在某些高级代码中的位置.在尝试理解这些类型的高级应用程序之前,请先了解低级基础类.
这也意味着您将在一般意义上理解函数和类,而不是在导致它们的代码的上下文中.当你发现points.interpolate(x),而不是想知道这个特定的论点interpolate对这些具体points做x了什么,找出它的一般作用.稍后,您将能够将新发现的知识应用于使用相同功能的任何代码.
尽管如此,我不担心1300行代码.这基本上是一个小项目.它只是比例子和大学作业更大.如果您考虑这些提示,那么这些代码应该易于管理.
一个调试器是一个程序,可以帮助您调试代码.调试器的常见功能允许您逐行浏览代码并观察变量值的变化.您还可以在代码中设置感兴趣的断点,调试器会在遇到它们时通知您.有些调试器甚至允许您在执行时更改代码.有许多不同的调试器都具有不同的功能集.