Przejdź do zawartości

Spaghetti code

Z Wikipedii, wolnej encyklopedii
To jest stara wersja tej strony, edytowana przez Ekrek4 (dyskusja | edycje) o 05:02, 1 mar 2007. Może się ona znacząco różnić od aktualnej wersji.

Spaghetti code- terminem tym przyjęto określać skomplikowany, trudny do zrozumienia kod źródłowy programu. W taki sposób napisanych zostało wiele programów w starszych

językach proceduralnych, typu Fortran czy Basic. Było to jeszcze przed powstaniem metody programowania strukturalnego.

Gdyby porównać ciąg instrukcji do makaronu tak wyglądałby spaghetti code

Używano wielu instrukcji warunkowych i następnych w nich zagnieżdżonych, instrukcji GOTO, wyjątków, które dalej powodowały wykonanie pewnej(ych) instrukcji. Droga przez kolejne instrukcje była tak poplątana, że odczytanie takiego kodu i zrozumienie go często graniczyło z cudem, a ewentualne modyfikacje zwykle prowadziły do błędów w programie.

Programowanie strukturalne, w myśl zasady "od ogółu do szczegółu", wprowadziło znaczne uporządkowanie w procesie tworzenia programów.

W skrócie polega to na dzieleniu zadania do wykonania na mniejsze aż do uzyskania wystarczająco prostych fragmentów do zrealizowania. Łatwiej wtedy jest zaimplementować w poszczególnych modułach procedury, które w całości dadzą pożądany efekt.

W praktyce zazwyczaj dzieli się program na funkcje, z których każda realizuje określony cel i może być wywoływana wielokrotnie. Tak napisany kod jest już znacznie bardziej czytelny.


Przykłady


Poniższy fragment kodu źródłowego języka Basic ilustruje nieczytelność kodu:

10 INPUT count
20 LET steps = count; bbk = 0; bk = 1
30 IF count < 1 THEN GOTO 70
40 LET k = bbk + bk
50 bbk = bk: bk = k
60 count = count - 1
70 PRINT "Wyraz nr "; steps - count; "ciagu Fibonacci'ego wynosi: "; k
80 IF count > 0 THEN GOTO 30
90 END

Program wyświetla podaną przez użytkownika ilość pierwszych wyrazów ciągu Fibonacci'ego. W kilku liniach trywialnego programu dość potrzebne było dwukrotne użycie bezwarunkowej instrukcji skoku- GOTO. Nie trudno się domyślić, że przy bardziej złożonym kodzie i większej liczbie skoków pojawi się problem z jego zrozumieniem. Nie mówiąc już o konserwacji programu.

Ten sam cel zrealizowany przez programowanie strukturalne (w C):

scanf ("%d",&steps);
   for (count = 0; count < steps; count++){
       static int bbk = 0, bk = 1;
       int k = bbk + bk;
       bbk = bk; bk = k;
       printf ("Wyraz nr %d ciagu Fibonacci'ego wynosi: %d\n",
       steps - count,k);
   }

Poszczególne kroki wykonywane są w przejrzystej i formalnej pętli. Ciąg instrukcji do wykonania w programowaniu strukturalnym nie może być dowolnie zmieniany, "przejścia" do poszczególnych bloków są obsługiwane przez zaimplementowane konstrukcje (np. for, while, do while czy if else).

Zobacz też

Action!

Ada

Algol

Atlas

autokod

kod maszynowy

programowanie obiektowe