Ach, spaghetti – przepyszne, gdy pokryte sosem marinara, pesto lub kremowym sosem do makaronu – okropne, gdy ma cokolwiek wspólnego z moimi liniami kodu. Ten artykuł jest poświęcony mojej (miłości?) nienawiści do kodu spaghetti.

Mam nadzieję, że pod koniec tego artykułu znienawidzisz kod spaghetti tak samo jak ja i będziemy mogli pocieszać się wspólnym doświadczeniem. A jeśli nie, to przynajmniej mam nadzieję, że nauczyłeś się czegoś nowego, a może nawet się pośmiałeś!

W tej historii o miłości i nienawiści do kodu spaghetti...

Zacznijmy więc od tego, czym jest kod spaghetti 🙄?

Tak się dzieje, gdy piszesz kod, który nie jest zgodny z dobrymi praktykami tworzenia oprogramowania. Mam nadzieję, że po przeczytaniu tego artykułu będzie jasne, czym jest kod spaghetti, a przynajmniej jak wygląda (i czego nie należy robić).

Formalne znaczenie terminu „kod spaghetti” odnosi się do sytuacji, w której występują tzw. głębokie lub szerokie zależności. Mam tu na myśli sytuację, w której kod zależy od zbyt wielu lub zbyt małej liczby elementów aplikacji, aby działać poprawnie.

Istnieje jednak wiele różnych opinii na temat tego, czym jest kod spaghetti. Moim zdaniem najlepszą definicję podał Alex Martelli: „Kod spaghetti powstaje, gdy nie przestrzega się zasad prawidłowej dekompozycji odgórnej”.

Dla tych, którzy nie znają terminu „odgórny”, pozwolę sobie zacytować Wikipedię: „Projektowanie odgórne, znane również jako projektowanie hierarchiczne, rozpoczyna się od zdefiniowania modułów wysokiego poziomu, a następnie kolejnych podmodułów niższego poziomu, aż do zdefiniowania poszczególnych procedur”.

Oznacza to, że idealny fragment kodu spaghetti zmieni się z tego, co jest obecnie zapisane, na to, co kod powinien robić, poprzez wykonanie następujących kroków:

1) Określ, do czego służy ten kawałek spaghetti.

2) Jeśli obecne działanie nie jest zgodne z oczekiwanym, należy je przepisać tak, aby spełniało wymagania (etap ten można podzielić na czynności, które ma wykonywać kod).

3) Napisz kod.

4) Powtarzaj, aż cały kod spaghetti zostanie zastąpiony kodem innym niż spaghetti.

Jednak najczęściej ludzie po prostu pomijają punkty 3 i 4 i przechodzą od razu do punktu 2 lub 1 (zwykle 1), a następnie zaczynają kodować jak szaleni naukowcy, nie zwracając uwagi na praktyki dotyczące czystego kodu. Kilka miesięcy później otrzymują coś, co powszechnie nazywa się kodem spaghetti.

Jak rozpoznać kod spaghetti?

Po pierwsze, jeśli Twój kod wygląda jak trudny do zrozumienia bałagan, to prawdopodobnie jest to pierwsza wskazówka. W przypadku trudniejszych do zidentyfikowania kodów spaghetti, oto kilka innych wskazówek:

  • Jeśli edytowanie kodu lub usuwanie błędów powoduje ogromną frustrację, prawdopodobnie jest to kod spaghetti.
  • Jeśli żaden programista nie chce współpracować z Tobą nad konkretnym projektem lub nie chce sprawdzić Twojej prośby o PR – istnieje duże prawdopodobieństwo, że jest to kod spaghetti.
  • Jeśli Twój przełożony ma przypadkowe wybuchy gniewu wobec Ciebie – prawdopodobnie piszesz dużo kodu spaghetti.

Nie martw się, jeśli któryś z tych przykładów dotyczy Ciebie. Liczy się to, jak postrzegasz swój kod spaghetti – prawdopodobnie to, co teraz wydaje Ci się złe, po przeczytaniu tego artykułu będzie wyglądało znacznie gorzej.

Jak więc wygląda kod spaghetti?

Zależy to od języka, w którym piszesz, oraz od używanych frameworków/bibliotek. Pokażę tutaj przykład kodu spaghetti napisanego w JavaScript przy użyciu jQuery:

function KFCSecretMenu() { //konstruktor

this.getKrushers = function() {

} } $(document).ready(function(){ //event listener for DOM Ready $(‘.welcome’).click(function (){ //event listener for click on element with class name of welcome $(‘.menu-item’).addClass(‘active’); //class to be added if the submenu is opened.

$(‘.menu-item’).find(‘.description’).slideDown(); //sliding down effect for description text }) }); function MenuItemClicked (e) { var itemID = $(e.target).parent().attr(‘id’); //gets ID of parent menu item var description = $(e.target).next().text() KFCSecretMenu.getKrushers({‘itemID’:itemID,’description’:description}); //calling function below }

Śledzisz? Nie, to na pewno spaghetti! 🕵️

Przyjrzymy się, co sprawia, że ten fragment kodu spaghetti jest tak zły, co sprawia, że jest bardziej spaghetti niż inne i co można zrobić, aby to naprawić. Co sprawia, że kod spaghetti jest tak zły? Myślę, że poniższa lista najlepiej opisuje cechy charakterystyczne kodu spaghetti: Powielone lub zbyt złożone funkcje, metody i zmienne Trudne do zrozumienia i/lub nieposiadające wcięć struktury Trudne do zrozumienia i/lub długie funkcje Trudne do odczytania białe znaki Trudna do zrozumienia logika Brak komentarzy Nietypowe style kodowania (zbytnia staranność) Dobre nazwy zmiennych.

Istnieją również inne czynniki, które mogą sprawić, że kod będzie nieuporządkowany, ale niekoniecznie zaliczają się one do kodu spaghetti: Niewydajne algorytmy Duże rozmiary plików Nieodpowiednio zaprojektowane oprogramowanie Brak testów Kod spaghetti wygląda inaczej w każdym języku, frameworku i bibliotekach – to, co w jednym przypadku może być kodem spaghetti, w innym może nim nie być. To właśnie sprawia, że trudno jest zdefiniować, jak wygląda kod spaghetti. Musisz przypomnieć sobie, co kilka lat temu byłoby dla Ciebie kodem spaghetti – jakie były największe problemy z Twoim kodem? Prawdopodobnie popełniłeś niektóre z błędów wymienionych powyżej, więc zacznij porównywać, co było złego w tych dawnych fragmentach kodu i staraj się pamiętać o tej liście podczas czytania tego artykułu.

Więc zidentyfikowałeś swój kod spaghetti, jak sobie z nim poradzić?

Kilka ważnych rzeczy, o których należy pamiętać, zanim zaczniemy omawiać, jak przekształcić nasz kawałek spaghetti… to znaczy kod w to, czym powinien być:

Uwaga 1: Istnieją setki (a może nawet tysiące) sposobów, jak NIE pisać kodu. Staram się przedstawić to w jak najprostszy sposób, a kontekst tego, co tutaj piszę, jest przeznaczony dla osób posiadających bardzo podstawową wiedzę na temat pisania kodu. Byłbyś zaskoczony, co można osiągnąć, dodając po prostu kilka spacji i komentarzy!

Uwaga 2: Przed podjęciem próby samodzielnej naprawy kodu spaghetti koniecznie należy zrozumieć, co się robi – w przeciwnym razie można tylko pogorszyć sytuację! Jeśli nie rozumiesz, przeczytaj ten artykuł ponownie, aż zrozumiesz, a następnie wróć tutaj.

Uwaga 3: Obecnie badamy, co powoduje nieuporządkowanie spaghetti, ale nie badamy, co mogło być przyczyną tego stanu rzeczy (i dlatego powinniśmy dobrze się zastanowić przed otwarciem naszego edytora).

Jakie są zalety kodu spaghetti?

Nic. Następna kwestia!

Jak zapobiegać powstawaniu spaghetti code w przyszłości?

Oprócz przeprowadzki do Włoch i znoszenia ciosów surowym spaghetti w głowę od bardzo rozgniewanego Włocha za każdym razem, gdy napiszesz nieczystą linię kodu, możesz spróbować następujących rzeczy...

  • Dobrym sposobem na uniknięcie kodu spaghetti jest tworzenie krótkich funkcji i metod. Oznacza to, że funkcja powinna wykonywać tylko to, do czego została stworzona. Nie ma potrzeby tworzenia funkcji, która wykonuje 10 różnych zadań lub ma 100 linii – usuń wszystko, co nie jest konieczne!
  • Kolejną wskazówką pozwalającą uniknąć kodu spaghetti jest zapobieganie zmianom tego, co zostało już zrobione – mam tu na myśli to, że należy unikać głębokiego zagnieżdżania pętli w innych pętlach, czyli innymi słowy: nie zagnieżdżaj tego, czego nie trzeba zagnieżdżać!
  • Nie zapomnij też o formatowaniu kodu – białe znaki i wcięcia mogą zdziałać cuda w przypadku kodu spaghetti! Im ładniejszy kod, tym łatwiej będzie go czytać.
  • Retros – zawsze analizuj, co poszło dobrze, abyś mógł to śledzić i wdrożyć następnym razem!
  • Alternatywnie, możesz poprawić swoje umiejętności kodowania.
  • Ostatnia wskazówka dotycząca planowania wyglądu kodu spaghetti: zamiast pisać kod bezpośrednio w edytorze, spróbuj narysować wykresy przedstawiające jego działanie (oznacza to, że przed faktycznym wdrożeniem funkcji należy sprawdzić, co każda z nich ma robić). Jeśli coś pójdzie nie tak, cofnij się o krok i zacznij od nowa.

Jeśli zastosujesz się do tych prostych zasad, mogę niemal zagwarantować, że to, co piszesz, nie zamieni się w spaghetti – ale co ja tam wiem? Może to, co twoja ciotka nazywała spaghetti, to w rzeczywistości spaghetti code w przebraniu.

Końcowe przemyślenia na temat kodu spaghetti

Możesz też spróbować pokochać swoje spaghetti jako jedyne źródło radości w swoim życiu! Jeśli to nie zadziała, masz do dyspozycji ten świetny GIF, który pokazuje alternatywę.

Meme dotyczące zadań i spotkań inżynierów – przegląd zaległości sprintu

Jeśli wszystko inne zawiedzie, możesz po prostu poprawić swoje umiejętności kodowania. Ale poważnie, to powinno być ostatnią, ostatnią, ostatnią, ostatnią rzeczą, którą powinieneś zrobić!