代码之家  ›  专栏  ›  技术社区  ›  Oliver Stubley

意大利面条的定义?

  •  5
  • Oliver Stubley  · 技术社区  · 15 年前

    我看过很多关于“意大利面”的报道,我只想清楚地解释一下 意大利面代码和什么 不是 . 只是因为我不想这么做。

    PHP中的引用会有所帮助,因为这是我选择的语言。

    5 回复  |  直到 15 年前
        1
  •  9
  •   Noldorin    15 年前

    术语“意大利面代码”一点也不特定于PHP——它适用于所有编程语言,在大多数语言中都应该非常相似(至少是相同的范例)。不过,您可能理解这一点,只需要一个PHP示例。

    这个 Wikipedia article 关于这个问题似乎很清楚:

    意大利面代码是一个贬义词 对于复杂的源代码 纠结的控制结构, 尤其是一个使用了很多goto, 异常、线程或其他 “非结构化”分支结构。 之所以这样命名是因为程序流 看起来像一碗 意大利面,扭曲和缠结。 意大利面代码可能是由 几个因素,包括 缺乏经验的程序员和 复杂的程序 长期不断改进 周期。结构化程序设计 降低了意大利面的发病率 代码。

    这个论坛主题, Top 100 Signs That I Am Writing Spaghetti Code in PHP ,可能对您有所帮助,因为它专门与PHP相关。

        2
  •  11
  •   Andomar    15 年前

    区别在于面条代码是由其他开发人员编写的。你的代码绝不是意大利面条代码。

        3
  •  4
  •   cletus    15 年前

    这里有一个相当不错的定义 spaghetti code .

    它是一个主观术语,用于描述代码过于复杂、结构不良、难以理解、不一致、依赖副作用(尤其是全局副作用)或这些副作用的某种组合。

    与大多数脚本语言一样,PHP是松散类型的。在使用变量之前不需要声明变量。在“全局”范围内使用了许多变量,并且有一些规定隐式地包括文件(自动加载),仅举几个例子。这些都不是坏的功能,但如果使用不当,它们很容易导致意大利面代码。

        4
  •  0
  •   Gerry    15 年前

    在编写良好的代码中,您应该能够清楚地遵循流程,不仅从开始到结束,而且从完成到开始(除非存在致命的错误条件,在这种情况下,您的处理程序应该有回溯输出)。 每个功能都遵循一个入口和一个出口的规则。 .

    避免意粉代码的一种方法是确保RETURN语句是您在函数中编写的最后一件事情,并且您从来没有比这更早的返回。

    如果一个函数返回了一个意外的值,干净的代码将允许您从RETURN语句开始,然后向后查看它的值在哪里。但是,如果代码是意大利面,那么大约一半的时间您将浪费数小时的时间困惑函数如何返回该值,直到您偶然发现埋在函数中间的第二个返回语句为止。

    我强烈反对克莱特斯和安多马尔的说法 全部的 主观的。函数中间的返回语句显然是意大利面代码。

        5
  •  0
  •   Community noseratio    7 年前

    这个 classical definition 意大利面条式代码是“由于使用了非结构化分支,其控制流很难遵循的代码”。因为PHP,就像70年代发明的大多数语言一样,不支持Goto,理论上你不能用它编写意大利面代码。(更新:从5.3开始,php确实有goto语句,但它在破坏性方面仍然有一定的局限性)

    然而,一个好的近似值可以通过长的脚本和函数来实现,这些脚本和函数可以自由地使用全局变量。奖励积分 deeply nested if/elseif/else cascades 格式错误。添加一些可以生成HTML的HTML、javascript、PHP、PHP的混合,以及 PHP which generates JavaScript which generates HTML 你要确保没有人能理解代码,即使是编写代码的人。