【问题标题】:What are some universal "clean-coding" conventions? [closed]有哪些通用的“干净编码”约定? [关闭]
【发布时间】:2012-04-28 15:39:18
【问题描述】:

除了特定于语言的结构之外,对于使用 PHP、javascript、java 和 python 编程的人来说,前 10 项干净编码必须做的事情是什么?我想保持我的代码尽可能干净和可读。例如,将函数体左括号与函数声明放在同一行与换行有何不同?此外,例如 (x==10) 与 (x == 10) 之间的间距是什么? 任何有关干净编码的有用提示将不胜感激!

【问题讨论】:

  • 抱歉,这只会引发宗教战争。编码没有“一种真正的方法”。尤其是在涉及支架定位等问题时。通常的规则是“符合你正在从事的项目的标准”,而在开始自己的项目时,“做你想做的,但要保持一致”
  • 是的,跨语言的编码风格已经达成共识。这并不是说人们几十年来一直在在语言中提倡不同的编码标准,但不知何故忘记了这些。
  • 这颗珍珠由 Damien_The_Unbeliever 决定。

标签: coding-style naming-conventions


【解决方案1】:

这里有一些可能会有所帮助:

  1. 为变量和方法提供直观的名称
  2. 使用您的特定语言编码风格(例如,在 Java 与 C++ 中,您 在括号上使用不同的样式;根据具体选择 语言约定)
  3. 始终对发生的事情/原因发表评论。
  4. 但不要用 cmets 污染代码。
  5. 如果可以,请尝试集成设计模式。它有助于可重用性 和维护
  6. 不要把所有东西都放在一个方法中。每个方法都应该做一个的事情 并且做到非常好(这也使方法更容易阅读/理解/测试/调试)
  7. 不要在代码中放入硬编码字符串
  8. 分离应用程序数据和应用程序代码。 IE。尽量不努力 您的代码的代码配置。
  9. 不要试图比编译器更聪明。编写其他代码 人们也可以理解它并让编译器做任何事情 优化
  10. 以显示您的意图的方式编写代码。写代码保持 在你的脑海里,你可能需要在 7 个月内调试它, 或者其他人可能需要修复/增强它。这是不可能的 记住你为什么在 7 个月后做某事(而 cmets 是 好,但有时还不够好)。更不用说那个可怜的人了 修复你的代码

我相信还有很多,但我相信这些对任何语言都有用

【讨论】:

  • 恕我直言,使用 cmets 本身并不是一个干净的代码。代码应该是不言自明的,并且不需要 cmets。
  • 这有帮助。谢谢。我不同意第 3 点,因为命名良好的方法、变量和单一职责应该消除对 cme​​ts 的需求。我只会在不寻常的事情被黑客入侵时发表评论——这不应该真的发生。
【解决方案2】:

参考:

http://misko.hevery.com/code-reviewers-guide/

http://misko.hevery.com/attachments/Guide-Writing%20Testable%20Code.pdf

并检查此响应中的链接:

https://stackoverflow.com/a/10359288/1268570

观看 Misko Hevery 的简洁代码演讲(提供给 Google 人员)

http://www.youtube.com/watch?v=wEhu57pih5w&feature=player_embedded

http://www.youtube.com/watch?v=RlfLCWKxHJ0&feature=player_embedded

http://www.youtube.com/watch?v=-FRm3VPhseI&feature=player_embedded

http://www.youtube.com/watch?v=4F72VULWFvc&feature=player_embedded

这些是你应该避免的警告信号:(来自 Misko Hevery)

  • 构造函数或字段声明中的新关键字
  • 在构造函数或字段声明中调用静态方法
  • 除了构造函数中的字段赋值之外的任何东西
  • 构造函数完成后对象未完全初始化(注意初始化方法)
  • 构造函数中的控制流(条件或循环逻辑)
  • 代码在构造函数中执行复杂的对象图构造,而不是使用工厂或构建器
  • 添加或使用初始化块
  • 违反 Demeter 定律:方法调用链遍历具有多个点 (.) 的对象图
  • 添加或使用单例
  • 添加或使用静态字段或静态方法
  • 添加或使用静态初始化块
  • 添加或使用服务定位器

这是一本关于编写干净代码的好书:

http://books.google.com.mx/books/about/Clean_Code.html?id=dwSfGQAACAAJ&redir_esc=y

【讨论】:

  • 静态方法有什么问题?
  • 同意@BlackBear - 你的目标是virtual 方法吗?
  • 没有状态且不会产生副作用的静态方法应该很容易进行单元测试。事实上,我认为这种方法是函数式编程的“穷人”形式。你给方法一个对象或值,它返回一个对象或值。而已。我根本看不到这些方法会对单元测试产生负面影响。但是你必须看到全貌......调用静态方法的方法呢?如果调用者在另一个类中,那么他们有一个需要解耦才能进行单元测试的依赖项。 (记住:静态调用是不可模拟和不可注入的)
  • 这篇文章解释得比我好misko.hevery.com/2008/12/15/…
  • 那么 int.TryParse (C#) 是不可能测试和维护的?
【解决方案3】:

在我看来,答案是没有真正的答案。一个好的规则是遵守约定,这通常是社区已经熟悉的合理约定。我宁愿给你推荐几本书来有个想法。

对于 Java/C++/C#/VisualBasic,您应该阅读

Code Complete: a practical handbook of software construction

在重 Java 方面,您将从

中获得有用的见解

Clean Code: a handbook of agile software craftmanship

请考虑这两本书中的概念具有普遍有效性,不应局限于特定语言。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多