spaghetti code
expressãoprogramação
Código cujo fluxo de controle é tão emaranhado que fica quase impossível de acompanhar.
O nome evoca um prato de macarrão: saltos e desvios se cruzam até que seguir um caminho signifique seguir todos. Classicamente causado pelo goto irrestrito, hoje descreve qualquer base de código em que tudo está enredado com tudo.
Código espaguete é fluxo de controle que você não consegue seguir: a execução salta de forma imprevisível, o estado é modificado de todos os lados, e entender uma parte exige entender o todo. A metáfora é precisa, porque a propriedade definidora é o emaranhado, e não o volume.
O termo remonta à época em que o goto era a principal estrutura de controle, e o movimento da programação estruturada foi em boa medida uma resposta a ele. Essa guerra foi vencida, e é por isso que a versão moderna veste outras roupas: não gotos, mas uma dúzia de classes que se chamam em ciclo, eventos disparando manipuladores que disparam mais eventos, ou uma cadeia de condicionais que ninguém ousa simplificar porque o comportamento é estrutural e não tem teste.
A observação honesta é que ninguém o escreve de propósito. Ele se acumula por decisões locais razoáveis, tomadas sob pressão de prazo por pessoas que não enxergavam o conjunto, e é por isso que culpar indivíduos erra o mecanismo. As defesas são estruturais: fronteiras que restringem quem pode chamar o quê, testes que tornem a refatoração segura o bastante para ser tentada, e revisões que perguntem se a mudança melhora o formato ou apenas fecha o chamado.
Também conhecido como: spaghetti, tangled code