Spagettikod

Spaghettikod  är ett dåligt utformat, dåligt strukturerat, förvirrande och svårt att förstå program , speciellt om det innehåller många GOTO-satser (särskilt back jumps), undantag och andra konstruktioner som försämrar strukturen [1] . Det vanligaste antimönster för programmering .

Spagettikoden heter så eftersom programmets flöde är som en skål med spagetti , det vill säga slingrigt och krångligt. Kallas ibland " kängurukod " ( kängurukod ) på grund av de många "hopp"-instruktionerna.

Numera tillämpas termen inte bara på fall av missbruk av GOTO, utan också på vilken "multi-linked" kod som helst där samma lilla fragment exekveras i ett stort antal olika situationer och utför väldigt många olika logiska funktioner [1] .

Spagettikod förekommer vanligtvis:

det är inte resultatet av avsiktlig förvirring.

Spaghettikod kan felsökas och köras korrekt och med hög prestanda, men det är extremt svårt att underhålla och utveckla [1] . Att redigera spagetti för att lägga till ny funktionalitet har ibland en så enorm potential för att introducera nya buggar att refaktorering (det huvudsakliga botemedlet mot spaghetti) blir oundvikligt.

Exempel

Följande är ett exempel på spagettikod i BASIC som utför en enkel åtgärd - att skriva ut siffrorna från 1 till 10 och deras rutor. Verkliga exempel på spagettikod är mycket mer komplexa och skapar fler underhållsproblem.

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

Samma kod, skriven i BASIC i stil med strukturerad programmering :

för i = 1 till 10 skriv ut i: " squared = " : i * i nästa skriver jag ut "Program avslutat."

Samma funktionell stil kod med iterationsmetoden, skriven i Ruby :

( 1 ... 10 ) . varje { | jag | sätter " #{ i } \t squared = #{ i ** 2 } " } sätter "Program completed."

Relaterade begrepp

I analogi med "spaghettikoden" har programmerare kommit på några fler koncept som ännu inte är allmänt accepterade.

  • Ravioli -kod är en kod som består av ett stort antal oberoende komponenter, och för att förstå hur man fixar ett fel i korsningen av komponenter måste man "bryta igenom" genom interkomponentgränssnitt.
  • Baklava -kod eller lasagnekod är kod som har för många (för en given uppgift) lager av abstraktion.
  • Katamari-kod är en kod som en gång var ren, men under utvecklingsprocessen täcktes den med funktionalitet, som en "katamari" från ett Playstation-spel .

Se även

Anteckningar

  1. 1 2 3 John Vlissides, Kyle Brown, Gerard Meszaros AntiPatterns: The Survival Guide. Spaghettikod Arkiverad 27 januari 2021 på Wayback Machine .

Länkar