我正在阅读Randall Hyde写的优秀代码(第2卷),我发现了这个:
[...]创建单片机并不是一个好的编程习惯 应用程序,其中所有源代码出现在一个源文件中(或由单个编译处理)[...]
我在想,为什么这么糟糕?
感谢大家的回答,我真的希望接受更多的答案,但我选择了最合成的,所以谁读了这个问题就立即找到了必需品。
谢谢你们;)
答案 0 :(得分:4)
在我看来,主要原因是缺少模块化,而不是文件的大小。软件变得易于维护,如果您将其分解为小块,它们之间的相互作用是通过几个明确定义的位置,例如一些公共方法或已发布的API。如果你把所有东西放在一个大文件中,那么倾向于让一切都依赖于其他一切的内部,这会导致维护噩梦。
在我的职业生涯早期,我参与了一个由超过一百万行C组成的地理信息系统。唯一能使其可维护的东西,唯一让它起作用的是我们有一个尖锐的在“上方”和“下方”的所有内容之间划分界限。 “上面”代码实现了用户界面,特定应用程序处理等,“下面”的所有内容都实现了空间数据库。分界线是已发布的API。如果你在“上面”工作,你不需要知道如何只要它遵循已发布的API,“下面”代码就可以工作。如果你在“下面”工作,只要你实现了已发布的API,你就不在乎你的代码是如何使用的。有一次,我们甚至取代了一大块“下面”的方面,这些方面已经存储了专有文件中的东西和SQL数据库中的表格,而“上面”的代码并不需要知道或关心。
答案 1 :(得分:3)
因为你很快就得到了(数十万行)无法维护的代码。
答案 2 :(得分:3)
因为一切都被塞满了。
如果您有单独的文件,那么您将能够更快地找到并编辑它。
此外,如果出现错误,您可以更轻松地找到它。
答案 3 :(得分:3)
无法阅读,无法维持,无法延长。
此外,这对团队合作很有帮助,因为有很多小文件可以由不同的开发人员并行编辑。
答案 4 :(得分:3)
一些原因:
答案 5 :(得分:2)
虽然我理解HTML和CSS不是'编程语言',但我想你可以在一页上同时拥有所有的.css,.js和.html:它很难回收或调试代码。
答案 6 :(得分:2)
将所有源代码包含在单个文件中会使代码难以管理。更好的方法应该是将程序划分为单独的模块。每个模块都应该有自己的源文件,最后应该链接所有模块以创建可执行文件。这有助于维护代码,并且可以轻松找到模块特定的错误。
此外,如果您有2个或更多人同时在同一个项目上工作,那么您很可能会浪费大量时间来解决代码冲突。
此外,如果您必须测试单个组件(或模块),您可以轻松完成,而无需担心其他独立模块(如果有)。
答案 7 :(得分:1)
因为分解是计算机科学的基础:通过将它们分解成更小的部分来解决大问题。这些较小的问题不仅更容易管理,而且还可以让您更轻松地了解整个问题。
当你在单个文件中谈论单片程序时,我能想到的就是那些在白天进入COBOL和FORTRAN的巨大意大利面条代码。它鼓励削减和粘贴的心态,只会随着时间的推移而变得更糟。
面向对象的语言试图帮助解决这个问题。 OO语言分解软件组件的问题,数据和功能封装在一起,映射到我们的世界运作方式的心理模型。
答案 8 :(得分:0)
根据Single Responsibility Principle来考虑一下。如果那个大文件,或者一个单片应用程序,或者一个“大东西”负责该系统的所有内容,那么它就是一个全能的功能。该功能应分为其可分离的组件,以实现可维护性,可重用性等。
答案 9 :(得分:0)
如果你在不同的方面做事,程序员会正确地执行一千行代码。您可以轻松管理和定位您的文件。
答案 10 :(得分:0)
除了上述所有原因外,通常编译单元中的所有文本都包含在最终程序中。但是,如果你把事情分开,事实证明特定文件中的所有代码都没有被使用,它就不会被链接。即使它被链接,如果您想在运行时决定使用该功能,也可以很容易将其转换为DLL。这有助于依赖关系管理,通过仅编译修改后的源文件来缩短构建时间,从而提高可维护性和生产力。
答案 11 :(得分:0)
从一些非常糟糕的经历中我可以告诉你,这是不可读的。在代码功能之后的功能,你永远无法理解程序员的意思或如何找到解决方法。
你甚至无法在文件中滚动,因为滚动条的一点点移动会滚动两页代码。
现在我正在重写整个应用程序,因为原始程序员认为创建3000行代码文件是一个好主意。它无法维持。当然,它完全不可测试。
答案 12 :(得分:0)
我认为你从来没有在一个文件中拥有 6000 代码行的大公司工作......而且每隔几千行就会看到像/** Do not modify this block, it's critical */
这样的评论而你认为这个bug分配给你的是来自那个街区。你的经理说,“是的,看看那个文件,它就在它的某个地方。”
代码打破了所有那些美丽的OOP概念,具有脏开关。和五十个贡献者一样。
幸运的你。