Spaghetticode

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

Spaghetticode of kortweg spaghetti is een minachtende term die door computerprogrammeurs wordt gebruikt om broncode aan te duiden met een overdreven complexe, (bijna) onontwarbare structuur, zodat bijna niet na te gaan is welke delen van het programma wanneer zullen worden uitgevoerd en welke delen van welke andere delen afhankelijk zijn (dependencies).

Wijzigingen zijn daarom moeilijk door te voeren, omdat nooit duidelijk is wat de effecten van een wijziging zullen zijn of omdat een kleine wijziging op de ene plaats wijzigingen op andere plaatsen vereist, die op hun beurt weer andere wijzigingen vereisen, et cetera. Men spreekt in zo'n geval van een maintenance cascade. Spaghetticode is veelal een gevolg van gebrek aan planning of een accumulatie van kortetermijnoplossingen (een kludge in jargon).

In veel spaghetticode wordt veelvuldig gebruikgemaakt van de GOTO-opdracht, een sprong binnen het programma waardoor een opdracht opnieuw wordt uitgevoerd of juist wordt vermeden. Dergelijke sprongen maken het programma onoverzichtelijk. Edsger Dijkstra waarschuwde in 1968 tegen het gebruik van de GOTO-opdracht in zijn artikel ‘Go To Statement Considered Harmful’ (Communications of the ACM 11 (3) (maart 1968), blz. 147–148).

Voorbeeld[bewerken]

Als voorbeeld een stukje spaghetti code in BASIC. Het programma print van de nummers 1 tot en met 10 het kwadraat op het scherm. Merk op dat in de code geen gebruik wordt gemaakt van inspringingen, en dat de GOTO statements een afhankelijkheid van regelnummers hebben. Let ook op de grillige manier waarop de lijn van uitvoering van het ene gedeelte van de code naar het andere springt.

10 i = 0
20 i = i + 1
30 PRINT i; " squared = "; i * i
40 IF i >= 10 THEN GOTO 60
50 GOTO 20
60 PRINT "Program Completed."
70 END

De volgende code is geschreven in een meer gestructureerde stijl. Het programma loopt netjes van boven naar beneden de instructies af en er zijn inspringingen gebruikt om de herhalingen aan te geven.

10 FOR i = 1 TO 10
20     PRINT i; " squared = "; i * i
30 NEXT i
40 PRINT "Program Completed."
50 END

Bij een grotere hoeveelheid code vormt spaghetticode snel een probleem, dat aanzienlijke onderhoudskosten met zich mee kan brengen.