我见过很多“意大利面条”,我只想清楚解释是意大利面条代码和不是的内容。只是因为我宁愿不这样做。
PHP中的引用会有所帮助,因为这是我选择的语言。
答案 0 :(得分:11)
区别在于意大利面条代码是由其他开发人员编写的。你的代码绝不是意大利面条代码。
答案 1 :(得分:9)
术语“意大利面条代码”并不特定于PHP - 它适用于所有编程语言,并且在大多数语言中应该看起来非常相似(至少是相同的范例)。也许你理解这一点,只想在PHP中有一个例子。
关于这个主题的Wikipedia article似乎很清楚:
Spaghetti代码是一个贬义词 对于具有复杂性的源代码 和纠结的控制结构, 尤其是使用许多GOTO的人 异常,线程或其他 “非结构化”分支构建体。 因为程序流程而得名 往往看起来像一碗 意大利面,即扭曲和缠结。 意大利面条代码可能是由 几个因素,包括 没有经验的程序员和一个 已经复杂的程序 持续改进长寿 周期。结构化编程很大 减少了意大利面条的发生率 代码。
此论坛帖子Top 100 Signs That I Am Writing Spaghetti Code in PHP可能对您有用,因为它与PHP有关。
答案 2 :(得分:4)
这是spaghetti code的相当不错的定义。
这是一个主观术语,用于描述过于复杂,结构错误,难以理解,不一致,依赖副作用(特别是全局副作用)或这些的某些组合的代码。
PHP与大多数脚本语言一样,是松散类型的。在使用变量之前,不需要声明变量。许多变量用于“全局”范围,并且隐含地包含文件(自动加载),仅举几例。这些都不是坏的功能,但是,使用得很糟糕,它们很容易导致意大利面条代码。
答案 3 :(得分:0)
意大利面条代码的classical definition是“由于使用非结构化分支而难以遵循控制流程的代码”。由于PHP,就像自20世纪70年代以来发明的大多数语言都不支持GOTO,理论上你不能在其中编写意大利面条代码。(更新:自5.3以来,PHP确实有一个goto语句,但它在破坏性潜力方面仍有些限制)
然而,使用自由使用全局变量的长脚本和函数可以实现良好的近似。 deeply nested if/elseif/else cascades的奖励积分和错误的格式。添加一些HTML,JavaScript,PHP,生成HTML的PHP和PHP which generates JavaScript which generates HTML的混合,你确保没有人能够理解代码,甚至不是编写代码的人。
答案 4 :(得分:0)
在编写良好的代码中,您应该能够清楚地遵循流程,不仅从开始到结束,而且从完成到开始(除非存在致命的错误情况,在这种情况下,您的处理程序应该具有回溯输出)。 遵循每个功能的一个入口和一个出口的规则。
避免使用意大利面条代码的一种方法是确保return语句是你在函数中编写的最后一项内容,并且你从未得到过早期的返回。
如果一个函数返回一个意外的值,那么干净的代码将允许你从return语句开始并向后工作以查看它获得它的值。但是,如果代码是意大利面,那么大约一半的时间你会浪费几个小时,关于函数如何返回该值,直到你偶然发现隐藏在函数中间的第二个返回语句。
我强烈不同意克莱图斯和安道尔声称它是所有主观的。函数中间的返回语句显然是意大利面条代码。