Spaghetti code: Różnice pomiędzy wersjami

Dodane 1744 bajty ,  12 lat temu
brak opisu edycji
'''Spaghetti code'''- terminem tym przyjęto określać skoplikowany, trudny do zrozumienia [[kod źródłowy]] programu. W taki sposób napisanych zostało wiele programów w starszych [[język_proceduralny|językach proceduralnych]], typu [[Fortran]] czy [[Basic]]. Było to jeszcze przed powstaniem metody [[programowanie_strukturalne|programowania strukturalnego]]. Używano wielu [[instrukcja_warunkowa|instrukcji warunkowych]] i następnych w nich zagnieżdżonych, które dalej powodowały wykonanie pewnej(ych) [[instrukcja_(informatyka)|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.
 
[[język_proceduralny|językach proceduralnych]], typu [[Fortran]] czy [[Basic]]. Było to jeszcze przed powstaniem metody [[programowanie_strukturalne|programowania strukturalnego]].
Programowanie strukturalne, w myśl zasady "od ogółu do szczegółu", wprowadziło znaczne uporządkowanie w procesie tworzenia programów.
[[Image:Spaghetti.jpg|thumb|Gdyby porównać ciąg instrukcji do makaronu tak wyglądałby [[spaghetti code]]]]
Używano wielu [[instrukcja_warunkowa|instrukcji warunkowych]] i następnych w nich zagnieżdżonych, instrukcji [[GOTO]], [[wyjątek|wyjątków]], które dalej powodowały wykonanie pewnej(ych) [[instrukcja_(informatyka)|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 fragmetów do zrealizowania. Łatwiej wtedy jest [[implementacja|zaimplementować]] w poszczególnych modułach [[podprogram|procedury]], które w całości dadzą porządany efekt.
 
W praktyce zazwyczaj dzieli się program na [[funkcja_(informatyka)|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śleć, że przy bardziej złożonym kodzie i większej liczbe 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_(język programowania)|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ętla_(informatyka)|pętli]].
Ciąg instrukcji do wykonania w programowaniu strukturalnym nie może być dowolnie zmieniany, "przejścia" do poszczególnych [[blok_podstawowy|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]]
 
[[Kategoria:Programowanie]]
16

edycji