Ah, espaguete, delicioso quando coberto com marinara, pesto ou molho cremoso de macarrão - horrível quando tem alguma coisa a ver com minhas linhas de código. Este artigo é dedicado à minha relação de (amor?) ódio com o código espaguete.
Espero que, ao final do artigo, você odeie o código espaguete tanto quanto eu, e que possamos nos consolar mutuamente com nossa experiência compartilhada. Se não for isso, pelo menos espero que você tenha aprendido alguma coisa, ou talvez até tenha dado risada!
Nessa história de amor e ódio do Código do Espaguete...
Então, vamos começar: o que é código espaguete 🙄?
É o que acontece quando você escreve um código que não segue práticas sólidas de desenvolvimento de software. Ao final deste artigo, espero que esteja claro o que é código espaguete ou, pelo menos, como ele se parece (e o que não fazer).
O significado formal de código espaguete é o que acontece quando você tem o que chamamos de dependências profundas ou amplas. O que quero dizer com isso é que seu código depende de muitas ou poucas partes do aplicativo para funcionar corretamente.
Mas há muitas ideias diferentes sobre o que constitui um código espaguete. Acho que minha definição favorita é a de Alex Martelli: "Código espaguete é o que acontece quando você não obedece às regras da decomposição top-down adequada".
Para aqueles que não estão familiarizados com o termo "top-down", deixe-me citar a Wikipedia sobre o assunto: "O design top-down, também conhecido como design hierárquico, começa definindo módulos de alto nível e, sucessivamente, submódulos de nível inferior até que as rotinas individuais sejam definidas."
Isso significa que um pedaço ideal de espaguete deixará de ser o que está escrito atualmente e passará a ser o que o código deveria fazer, seguindo essas etapas:
1) Identifique o que esse pedaço de espaguete faz.
2) Se o que ele faz atualmente não é o que deveria fazer, reescreva-o para que ele faça o que precisa fazer (esse estágio pode ser dividido no que você precisa que seu código faça).
3) Escreva o código.
4) Repita até que todo o espaguete tenha sido substituído por um código sem espaguete.
No entanto, na maioria das vezes, as pessoas simplesmente ignoram os itens 3 e 4 e vão direto para o 2 ou 1 (geralmente o 1) e começam a programar como cientistas loucos, sem nenhuma consideração pelas práticas de código limpo.
Como identificar o código espaguete?
Em primeiro lugar, se o seu código parecer uma bagunça difícil de seguir, essa provavelmente é a primeira dica. Para códigos espaguete mais difíceis de identificar, aqui estão algumas outras pistas:
- Se a edição do seu código ou a depuração causar imensa frustração, é provável que se trate de um código espaguete.
- Se nenhum desenvolvedor quiser trabalhar com você em um projeto específico ou quiser analisar sua solicitação de RP, é provável que seja um código espaguete
- Se o seu gerente tem explosões aleatórias de raiva contra você, é provável que você escreva muito código espaguete.
Não se preocupe se algum desses exemplos se aplica a você, o que importa é como você acha que seu código espaguete se parece - é provável que o que você acha que está ruim agora fique muito pior depois de ler este artigo.
Então, qual é a aparência do código espaguete?
Isso depende da linguagem em que você está escrevendo e da estrutura/libs que está sendo usada. Aqui, mostrarei um código espaguete escrito em JavaScript usando jQuery como exemplo:
function KFCSecretMenu() { //constructor
this.getKrushers = function() {
} } $(document).ready(function(){ //event listener for DOM Ready $(‘.welcome’).click(function (){ //event listener for click on element with class name of welcome $(‘.menu-item’).addClass(‘active’); //class to be added if the submenu is opened.
$(‘.menu-item’).find(‘.description’).slideDown(); //sliding down effect for description text }) }); function MenuItemClicked (e) { var itemID = $(e.target).parent().attr(‘id’); //gets ID of parent menu item var description = $(e.target).next().text() KFCSecretMenu.getKrushers({‘itemID’:itemID,’description’:description}); //calling function below }
Seguindo? Não, é espaguete mesmo! 🕵️
Veremos o que torna esse trecho de código espaguete tão ruim, o que o torna mais espaguete do que outros e o que você pode fazer para corrigi-lo. Então, o que torna o código espaguete tão ruim? Acho que esta é a lista mais útil do que torna o código espaguete o que ele é: Funções, métodos e variáveis duplicados ou excessivamente complexos Estruturas difíceis de seguir e/ou não indentadas Funções difíceis de seguir e/ou longas Espaços em branco difíceis de ler Lógica difícil de seguir Falta de comentários Estilos de codificação incomuns (tentando demais) Bons nomes de variáveis.
Há também alguns outros fatores que tornarão seu código uma bagunça, mas que não necessariamente contam como código espaguete: Algoritmos ineficientes Tamanho grande do arquivo Software mal projetado Falta de testes O código espaguete tem aparência diferente em cada linguagem, estrutura e biblioteca usada - o que pode ser espaguete em uma pode não ser espaguete em outra. Isso é o que torna difícil definir o que é um código espaguete. O que você precisa fazer é pensar no que teria sido um código espaguete para você há alguns anos: quais eram os maiores problemas com o seu código? Você provavelmente cometeu alguns dos erros da lista acima, portanto, comece a comparar o que havia de ruim nesses códigos anteriores e tente manter essa lista em mente enquanto lê este artigo.
Então, você identificou seu código espaguete, como lidar com ele?
Algumas coisas importantes a serem observadas antes de começarmos a discutir como transformar nosso pedaço de espaguete... quero dizer, código, no que ele deveria ser:
Observação 1: Existem centenas (talvez milhares) de maneiras de NÃO escrever seu código. Estou tentando manter isso o mais simples possível, o contexto do que estou escrevendo aqui é para aqueles que têm um conhecimento muito básico sobre como escrever código. Você ficaria realmente surpreso com o que pode fazer simplesmente adicionando alguns espaços em branco e comentários!
Observação 2: É essencial que você entenda o que está fazendo antes de tentar consertar um código espaguete por conta própria - caso contrário, você só vai piorar a situação! Caso contrário, você só piorará o problema! Se não entender, leia este artigo novamente até que você entenda - depois volte aqui.
Observação 3: Estamos investigando o que faz com que seu espaguete fique bagunçado no momento, mas o que não estamos investigando é o que poderia ter causado isso em primeiro lugar (e que, portanto, deveria nos fazer pensar duas vezes antes de abrir nosso editor).
Quais são os benefícios do código espaguete?
Nada. Próximo ponto!
Como evitar futuros códigos espaguete?
Além de se mudar para a Itália e pedir a um italiano muito zangado que lhe bata na cabeça com um monte de espaguete cru toda vez que você escrever uma linha de código impuro, você pode tentar estas coisas...
- Uma boa maneira de evitar o código espaguete é manter suas funções e métodos curtos. Isso significa que uma função deve fazer apenas o que deve ser feito, não há necessidade de uma função que faça 10 coisas diferentes ou que tenha 100 linhas - remova o que não for necessário!
- Outra dica para evitar o código espaguete é evitar que o que foi feito seja alterado - o que quero dizer com isso é que você deve tentar não ter aninhamento profundo de loops dentro de outros loops ou, em outras palavras: não aninhe o que não precisa ser aninhado!
- Não se esqueça também da formatação do código. O espaço em branco e a indentação podem fazer milagres em um código espaguete! Quanto mais bonito for o código, mais fácil será sua leitura.
- Retrospectivas - sempre revise o que deu certo para que você possa acompanhar e implementar na próxima vez!
- Como alternativa, você pode melhorar sua codificação
- Uma última dica ao planejar a aparência do seu código espaguete: tente desenhar gráficos do que deseja que ele faça em vez de escrever o código diretamente no editor (ou seja, veja o que cada função precisa fazer antes de implementá-la de fato). Se isso der errado, dê um passo atrás e comece de novo.
Se você seguir essas regras simples, posso quase garantir que o que está escrevendo não se transformará em espaguete - mas quem diria? Talvez o que sua tia costumava chamar de espaguete seja, na verdade, um código espaguete disfarçado.
Considerações finais sobre o código espaguete
Você também pode tentar abraçar seu espaguete, amá-lo como a única fonte de alegria em sua vida! Se isso não funcionar para você, há este excelente GIF que simula a alternativa.
Se tudo o mais falhar, você pode simplesmente melhorar sua capacidade de codificação. Mas, falando sério, essa deve ser a última, última, última, última coisa que você deve fazer!