Czysty kod - metody

Dzisiaj przedstawię jak sprawić, aby metody klas były czytelniejsze. Oczywiście czekam na komentarze, aby uzyskać jeszcze lepszą technikę pisania kodu. Mam nadzieję, że współpraca będzie owocna, a więc zaczynamy.

Co uważam za ważne dla czytelności funkcji?

  • Rozdzielenie poziomów abstrakcji
  • Przybliżę, co mam na myśli.

    Co uważam za poziomy abstrakcji?

    Jeden poziom abstrakcji to są opisy czynności jakie musimy wykonać uwzględniając identyczną szczegółowość. Najłatwiej będzie to pokazać na przykładzie.

    Z powodu, że jest już po świętach przydałoby się rozebrać choinkę :).

    1. Najbardziej ogólnym poziomem abstrakcji to będzie czynność "rozbieranie choinki".
    2. Kolejnym poziomem to będzie ściągnąć bombki, ściągnąć lampki oraz ściągnąć łańcuch.
    3. Następny to weź złap lampki od góry i okrężnym ruchem powoli je ściągaj, tak samo z łańcuchami.

    Mam nadzieję, że wyjaśniłem czym są poziomy abstrakcji.

    Dlaczego rozdzielenie tych poziomów się przydaje?

    Czytelnik takiego kodu łatwo interpretuje co robi dana funkcja, gdy nie jest pomieszany poziom abstrakcji. Na pewno każdemu z Was zdarzyło się czytać kod, gdzie wywoływane były metody z poziomu wysokiego, takie jak "wygeneruj coś" a potem pomieszane zapisywanie do bazy poszczególnych rzeczy na 20 linijek i następnie znowu jakieś "oblicz". Jak dla mnie taki kod jest nieczytelny, a na pewno niekorzystne jest skakanie po różnych szczegółach abstrakcji.

  • Pojedyncza odpowiedzialność
  • Tutaj sprawa jest prosta oraz stosowana w pisaniu wszystkiego (projektów, klas, interfejsów, metod). Chodzi o to, żeby funkcje robiły tylko jedną czynność. Pomaga to właśnie w rozdzieleniu poziomów abstrakcji, pisaniu czytelnych nazw funkcji oraz używaniu małej ilości parametrów.

    Przedstawię kilka rad oraz wskazówek jak tego dokonać:

    1. Myśl o poziomach abstrakcji.
    2. Parametr, który jest flagą prawie zawsze oznacza dwie odpowiedzialność.
    3. Nazwa metody powinna zawierać tylko jeden czasownik, który całkowicie opisuje co ona robi.

    Stosując wspomniane porady jesteśmy w stanie stworzyć metodę o pojedynczej odpowiedzialności.

  • Krótkie nazwy
  • Długie nazwy czasami nie są złe, ale powinniśmy robić je jak najbardziej krótkie. Czyta je się szybciej i są bardziej zrozumiałe. Gdy nazwa jest długa istnieje ryzyko, że metoda nie zachowuje pojedynczej odpowiedzialności. Najczęściej posiadają one też zbędne słowa, które są w nazwie klasy lub ogólnie nie mają znaczenia.

  • Mała ilość parametrów
  • Tutaj też istnieje ryzyko, że nie stosujemy pojedynczej odpowiedzialności. Czasami okazuje się, że parametry można ubrać w jedną strukturę lub obiekt, ponieważ razem tworzą jakąś rzeczywistość. Duża ilość parametrów funkcji zasłania nam jej funkcjonalność. To bardzo pogarsza jej czytelność.

  • Stosujmy ustalone standardy
  • Nic nie ułatwia czytanie funkcji jak zobaczenie znanej już składni. A nic bardziej nie pogarsza czytelności i ponadto przekłada się na błędy jak zmiana kolejności parametrów. Chodzi mi tutaj o to, że jeżeli raz użyliśmy jakiejś kolejności w parametrach stosujmy ją we wszystkich funkcjach. Jak nagle zmienimy kolejność to każdy czytelnik naszego kodu będzie musiał uważać, aby nie pomylić się w trakcie używania oraz czytania takiego kodu.

Podsumowując

Mam nadzieję, że wymieniłem tutaj główne czynniki, które powinny być stosowane w czystym kodzie. Zapraszam do dyskusji w komentarzach. I jeżeli wcześniej tego nie zrobiliście to do przeczytania poprzedniego wpisu o komentarzach.

Comments

Popular posts from this blog

Why TDD is bad practice?

How correctly imitate dependencies?

Software development using Angular 5 with Spring Boot