Zagadnienie formatowania kodu nie jest skomplikowane, jednak problem polega na tym, że ilu programistów tyle preferencji oraz ile zespołów, tyle stylów formatowania. Przykładowo narzędzie clang-format zawiera następujące predefiniowane style dla języka C++: LLVM, GNU, Google, Chromium, Microsoft, Mozilla, WebKit. Sam język również nie ułatwia sprawy, gdyż standard nie wymusza stylu, a złożoność języka powoduje, że niesformatowany kod może być bardzo trudny w zrozumieniu. Dla przykładu istnieje konkurs IOCCC1, którego jednym z celów jest wykazanie, że formatowanie jest ważne. Poniżej została przedstawiona jedna z bardziej estetycznych prac:

Autor: Carl Banks Źródło: http://www.ioccc.org/years.html#1998_banks

Język Python nie zapewnia takiej elastyczności w formatowaniu, ponieważ wymusza między innymi wcięcia bloków kodu. Niemniej kod również potrafi być nieczytelny, co prezentuje poniższy obraz:

Źródło: http://www.polystyle.com/features/python-unformatted.jsp

W przypadku języka Python dodatkowo zostały opracowane sugestie dotyczące stylu. Takie wytyczne zawiera między innymi dokument PEP-8. Społeczność Python poszła o krok dalej i opracowała co najmniej dwa bezkompromisowe narzędzia narzucające styl kodu:

Korzyści jakie daje automatyczne formatowanie

Korzyści z zastosowania narzędzi są dwie. Pierwsza z nich wynika z automatyzacji procesu – program do formatowania zastosuje wybrany styl w taki sam sposób dla wszystkich plików w projekcie, a jednolity styl ułatwia czytanie kodu.

Drugą korzyścią jest ułatwienie procesu recenzowania kodu (code review), ponieważ osoba oceniająca nie musi skupiać się na formatowaniu i wytykać miejsca w kodzie, gdzie brakuje wcięcia lub przełamania linii. Dodatkowo wytykanie takich drobiazgów może powodować zniechęcenie u recenzenta oraz frustrację u autora proponowanych zmian.

Automatyczne formatowanie kodu nie musi być czarną magią!

Jak wdrożyć narzędzia formatowania?

To zależy od wielkości projektu oraz w jaki sposób projekt jest zorganizowany. Jeżeli projekt jest mały lub nie zawiera gałęzi (branches), które trzeba utrzymywać i synchronizować (merge) z kodem głównym projektu to najłatwiejszą strategią jest wybór lub opracowanie stylu w wybranym narzędziu i zaaplikowanie tegoż w całym kodzie projektu.

W przypadku projektów, w których dokonuje się synchronizacji kodu pomiędzy gałęziami, wówczas agresywna strategia wprowadzania formatowania przysporzy problemów podczas dokonywania wspomnianej synchronizacji powodując wiele konfliktów w kodzie. W takiej sytuacji można posłużyć się strategią małych kroków i sukcesywnie wprowadzać zmiany i ujednolicanie w formatowaniu. Wskazana strategia wymaga programów do formatowania umożliwiających selektywne wprowadzanie zmian oraz wymaga cierpliwości w doborze parametrów konfiguracji tych programów2.

Odrębnym podejściem jest integracja automatycznego formatowania z IDE. W takim przypadku jednak już istniejący kod źródłowy zostanie przeformatowany jedynie w sytuacji wprowadzania nowych zmian. Dodatkowo zaproponowane zmiany (commit, pull request) będą zawierały zarówno nową logikę biznesową oraz zmiany w formatowaniu często jest niepożądane. Wzbogacenie edytora o automatyczne formatowanie jest dobrym pomysłem w sytuacji pracy z już sformatowanym kodem lub w przypadku wprowadzania nowych plików.

Potrzebujesz wsparcia we wdrożeniu automatycznego formatowania kodu?

  1. konkurs dotyczy języka C ↩︎
  2. takimi programami nie jest ani black ani wemake-python-styleguide ↩︎


Leave a Reply

Your email address will not be published. Required fields are marked *