Coding style 良好编程实践

Coding style 良好编程实践,coding-style,compilation,Coding Style,Compilation,我正在阅读Randall Hyde的《编写伟大的代码》(第2卷),我发现: […]创建单片计算机不是很好的编程实践 应用程序,其中所有源代码都显示在一个源文件中(或由单个编译处理)[…] 我在想,为什么这么糟糕 谢谢大家的回答,我真的很想接受更多的答案,但我选择了最综合的答案,以便阅读此问题的人能够立即找到要点 谢谢大家;) 因为你很快就会得到(数万)行无法维护的代码。因为一切都被塞满了 如果您有单独的文件用于不同的内容,那么您将能够更快地查找和编辑它 此外,如果有错误,您可以更轻松地找到它。

我正在阅读Randall Hyde的《编写伟大的代码》(第2卷),我发现:

[…]创建单片计算机不是很好的编程实践 应用程序,其中所有源代码都显示在一个源文件中(或由单个编译处理)[…]

我在想,为什么这么糟糕


谢谢大家的回答,我真的很想接受更多的答案,但我选择了最综合的答案,以便阅读此问题的人能够立即找到要点


谢谢大家;)

因为你很快就会得到(数万)行无法维护的代码。

因为一切都被塞满了

如果您有单独的文件用于不同的内容,那么您将能够更快地查找和编辑它


此外,如果有错误,您可以更轻松地找到它。

无法读取、无法维护、无法扩展


此外,它还有利于团队工作,因为有许多小文件可以由不同的开发人员并行编辑。

请从以下方面考虑它。如果一个大文件,或者一个单片应用程序,或者一个“大东西”负责与该系统相关的所有事情,那么它就是一个包罗万象的功能。出于可维护性、可重复使用性等原因,该功能应划分为独立组件。

一些原因:

  • 像那样挤在一起的东西很难理解。打破 将逻辑转换为函数使其更易于遵循
  • 将逻辑分解为离散组件可以让您在其他地方重用这些组件。有时“其他地方”指“同一程序中的其他地方”
  • 您不可能对以单片方式构建的东西进行单元测试。打破 一个巨大的功能(或程序)分成若干部分,允许您单独测试这些部分
虽然我知道HTML和CSS不是“编程语言”,但我想你可以从将所有的.CSS、.js和.HTML都放在一个页面上的角度来看:这使得代码回收或调试变得困难。

程序员可以正确地编写上千行代码,如果你从不同的角度进行操作的话。您可以轻松地管理和定位文件

主要原因是缺乏模块化,在我看来,这比所讨论的文件的大小更重要。如果您将软件分解成小块,通过一些定义良好的地方(例如一些公共方法或发布的API)彼此交互,那么软件就很容易维护。如果将所有内容都放在一个大文件中,则倾向于所有内容都依赖于其他内容的内部,这会导致维护噩梦


在我职业生涯的早期,我在一个地理信息系统上工作,该系统由超过一百万行的C语言组成。唯一使它可维护的东西,唯一使它工作的东西是,我们在“上面”和“下面”之间有一条清晰的分界线。“上面”的代码实现了用户界面、特定于应用程序的处理等,“下面”的所有内容都实现了空间数据库。分界线是一个发布的API。如果你在“上面”工作,你不需要知道“下面”的代码是如何工作的,只要它遵循发布的API。如果你在“下面”工作“,只要实现了已发布的API,您就不在乎代码的使用方式。有一次,我们甚至用SQL数据库中的表替换了大量存储在专有文件中的“下方”代码,而“上方”代码则不必知道或在意。

除了上述所有原因,通常编译单元中的所有文本都包含在最终程序中。然而,若你们把东西分开,那个么结果是特定文件中的所有代码都并没有被使用,那个么它就不会被链接。即使它被链接,如果您想在运行时决定使用该功能,也可以很容易地将其转换为DLL。这有助于依赖关系管理,通过只编译修改过的源文件来缩短构建时间,从而提高可维护性和生产效率。

将所有源代码包含在一个文件中会使代码管理变得困难。更好的方法应该是将程序划分为不同的模块。每个模块都应该有自己的源文件,所有模块最终都应该链接以创建可执行文件。这有助于维护代码,并使查找特定于模块的bug变得容易

此外,如果您有两个或两个以上的人同时在同一个项目上工作,您很可能会在解决代码冲突方面浪费大量时间


此外,如果您必须测试单个组件(或模块),您可以轻松地进行测试,而不必担心其他独立模块(如果有)。

根据一些非常糟糕的经验,我可以告诉您,它是不可读的。一个函数接一个函数的代码,你永远无法理解程序员的意思或如何找到摆脱它的方法

您甚至不能在文件中滚动,因为滚动条的一点移动会滚动两页代码


现在我正在重写整个应用程序,因为最初的程序员认为创建3000行代码文件是个好主意。它就是无法维持。当然,这是完全不稳定的。

我想你从未在一个文件中包含6000行代码的大公司工作过。。。你每看到几千行注释,比如
/**不要修改这个块,这很关键*/
,你认为分配给你的bug来自这个块。你的经理说,“是的,看看那个文件,它就在里面的某个地方。”

代码打破了所有那些漂亮的OOP概念,有肮脏的开关。大概有五十个投稿人


你真幸运。

因为分解是计算机科学的基础:通过分解来解决大问题