面条式代码(spaghetti code)是非结构化和难以维护的源代码的贬义词组,广泛地解释。 意大利面条代码可能由多种因素引起,例如易变的项目要求,缺乏编程风格规则以及能力或经验不足。
含义代码过度使用GOTO语句而不是结构化编程结构,从而导致错综复杂和不可维护的程序,通常称为意大利面条代码。 这样的代码有一个复杂和纠结的控制结构,导致程序流程在概念上就像一碗意大利面,扭曲和纠结。在美国国家标准局1980年出版的一本出版物中,用“意大利面条”这个词来描述那些“分散和分散的文件”的较旧的节目。 意大利面代码也可以描述一种反向模式,在这种模式下,面向对象是以程序风格编写的,比如创建方法过于冗长和混乱的类,或者抛弃面向对象的概念,比如多态。这种形式的意大利面代码的存在可能会显着降低系统的可理解性1。
发展尚不清楚面条代码的用法何时开始普遍使用;然而,1977年出现了几个参考文献,其中包括马克罗尼尔在19岁的人工智能和编程语言研讨会论文集中发表的“比不上意大利面条”。在1978年出版的关于使用PL/I,PL/CS和PL/CT进行规范编程的入门书中,理查德康威使用这个术语来描述“与一盘意大利面具有相同清洁逻辑结构”的程序类型,在与他共同撰写的1979年与他合着的“编程入门”一书中重复出现的一句话。在1988年的论文A软件开发和增强的螺旋模型中,这个术语用来描述代码和修复模型的老练,缺乏规划并最终导致了瀑布模型的发展。在1979年为COBOL程序员编写结构化程序设计的书中,作者Paul Noll使用短语意大利面条代码和老鼠窝作为同义词来描述结构不良的源代码。
在Ada-Europe会议上,Ada被形容为迫使程序员“产生可理解的,而不是意大利面代码”,因为它的限制性异常传播机制。
1981年,密歇根技术公司的计算机语言欺骗题为“BASICally speaking ... FORTRAN bytes !!”,作者将FORTRAN描述为“证明IBM的联合创始人是意大利人,因为它完全由意大利面条代码组成”。非结构化代码的这个术语的流行至少部分是由于两位意大利数学家(CorradoBöhm和Giuseppe Jacopini)于1966年发表了“结构化程序定理”,后来两年后被Edsger引用迪杰斯特拉在他的公开信中(一位编辑添加了标题“去认为有害”)。
代码意大利面条式代码( spaghetti code)一词通常用于描述捆绑在一起并且具有低内聚力的类和方法。下面提供了意大利面条式代码的示例。相对通用的Uti1s类将使用许多不同对象并且有许多依赖关系。它执行很多操作,因而很难实现重用。
phpclass utils{ public static function formatAddress(sformatType, Saddressl,Saddress2, City, Sstate){ return some address string";} public static function formatpersonName (sformatType, SgivenName,SamilyName){ return some person name;} public static function parseAddress(SformatType, Sval){ return new Address 0;} public static function parseTelephoneNumber(sformatType, Sval){ return new TelephoneNumber 0;}} 本词条内容贡献者为:
王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所