良好的编程习惯

时间:2010-12-30 13:42:17

标签: coding-style compilation

我正在阅读Randall Hyde写的优秀代码(第2卷),我发现了这个:

  

[...]创建单片机并不是一个好的编程习惯   应用程序,其中所有源代码出现在一个源文件中(或由单个编译处理)[...]

我在想,为什么这么糟糕?


感谢大家的回答,我真的希望接受更多的答案,但我选择了最合成的,所以谁读了这个问题就立即找到了必需品。

谢谢你们;)

13 个答案:

答案 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概念,具有脏开关。和五十个贡献者一样。

幸运的你。