Spaghetti kode

Spaghettikode  er et dårligt designet, dårligt struktureret, forvirrende og svært at forstå program , især hvis det indeholder mange GOTO-sætninger (især tilbagespring), undtagelser og andre konstruktioner, der nedbryder struktur [1] . Det mest almindelige programmerings anti -mønster .

Spaghetti-koden hedder sådan, fordi programmets flow er som en skål spaghetti , dvs. snoet og indviklet. Nogle gange kaldet " kængurukode " ( kængurukode ) på grund af de mange "spring"-instruktioner.

I dag anvendes udtrykket ikke kun på tilfælde af misbrug af GOTO, men også på enhver "multi-linket" kode, hvor det samme lille fragment udføres i et stort antal forskellige situationer og udfører mange forskellige logiske funktioner [1] .

Spaghetti-kode forekommer normalt:

det er ikke resultatet af bevidst sløring.

Spaghettikode kan fejlsøges og køres korrekt og med høj ydeevne, men det er ekstremt svært at vedligeholde og udvikle [1] . Redigering af spaghetti for at tilføje ny funktionalitet rummer nogle gange et så stort potentiale for at introducere nye fejl, at refactoring (den vigtigste kur mod spaghetti) bliver uundgåelig.

Eksempel

Det følgende er et eksempel på spaghettikode i BASIC , der udfører en simpel handling - udskrivning af tallene fra 1 til 10 og deres firkanter. Reelle eksempler på spaghettikode er meget mere komplekse og skaber flere vedligeholdelsesproblemer.

10 i = 0 20 i = i + 1 30 hvis i <= 10 goto 70 40 hvis i > 10 goto 50 50 print "Program completed." 60 end 70 print i: " squared = " : i * i 80 goto 20

Den samme kode, skrevet i BASIC i stil med struktureret programmering :

for i = 1 til 10 udskriv i: " squared = " : i * i næste udskriver jeg "Program afsluttet."

Den samme funktionelle kode ved hjælp af iterationsmetoden, skrevet i Ruby :

( 1..10 ) . _ _ hver { | jeg | sætter " #{ i } \t squared = #{ i ** 2 } " } sætter "Program completed."

Relaterede begreber

I analogi med "spaghettikoden" er programmører kommet med et par flere koncepter, som endnu ikke er almindeligt accepterede.

  • Ravioli -kode er en kode, der består af et stort antal uafhængige komponenter, og for at forstå, hvordan man løser en fejl i krydset mellem komponenter, skal man "bryde igennem" gennem interkomponent-grænseflader.
  • Baklava -kode eller lasagnekode er kode, der har for mange (til en given opgave) lag af abstraktion.
  • Katamari-kode er en kode, der engang var ren, men under udviklingsprocessen blev den dækket af funktionalitet, som en "katamari" fra et Playstation-spil .

Se også

Noter

  1. 1 2 3 John Vlissides, Kyle Brown, Gerard Meszaros AntiPatterns: The Survival Guide. Spaghettikode Arkiveret 27. januar 2021 på Wayback Machine .

Links