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:
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:
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.
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?
Leave a Reply