Jak przysiadamy do książki do chcemy by jej skład i układ tekstu był schludny, czytelny, przejrzysty. Baa nie myślimy nawet o tym więc trudno tego chcieć, my zakładamy, że tak jest. Kiedy coś nie pasuje automatycznie to wychwytujemy, zaczynamy wolniej czytać, słabiej przyswajać wiedzę/treść. Dopiero z czasem się przyzwyczajamy, przestajemy zwracać uwagę na to aż… do kolejnego miejsca które jest inne, niż linijka wyżej i linijka niżej.
Taka sama sytuacja jest z kodem, to jak my go formatujemy czy jakich przedrostów używamy i czy w ogóle używamy jest uzależnione w dużej mierze od tego czy pracujemy sami czy z zespołem. Sami mamy pewny styl, zespół może mieć inny, zaś projekt open source na github zupełnie jeszcze inny.
W takich sytuacjach najlepiej jest dostosować się do tego co jest wymagane. Zespół wymaga by wszystkie zmienne klasowe były pisane małą literką z podkreśleniem przed nazwą i odwoływanie do nich powinno następować po słowie kluczowym this i do tego nie mamy spacji tylko taby, to tak ma być. Można dyskutować nad sensem z resztą zespołu, zgłosić poprawki “ulepszenia” itp. ale nie zależnie co zrobimy to i tak nie powinniśmy ingerować w to w jaki sposób kod jest tworzony, po prostu dostosujmy się do stylu wykorzystywanym w pozostałych miejscach.
Niezależnie więc od tego czy piszemy dla siebie czy z zespołem, trzymajmy się jednego stylu. Jak coś nas drażni rozmawiajmy o tym, proponujmy zmiany, dochodźmy do tego dlaczego tak a nie inaczej. Może oni nas przekonają albo my ich, w najgorszym wypadku zróbmy wszystko by dojść do sytuacji win-win. Ten projekt tak, następny inaczej.
To czego nie róbmy to nie mieszajmy styli gdyż to jest to co przykuje uwagę i będzie ciężko się od tego oderwać czytając kod, wręcz… może doprowadzić do tików nerwowych ;) Ostatnio miałem właśnie przyjemność czytać taki kod, który na zmianę nazywał zmienne klasowe z wielkiej, z małej lub z przedrostkiem _
. Do tego część zmiennych miała własności a część metody zwracające wartość. Do tego dochodziło losowe wykorzystanie this w kodzie poprzez this
. Bardziej urozmaiconego kodu nie widziałem od dłuższego czasu.
Poniżej zamieszam kod (jedna z kilku klas, pozmieniałem tylko nazwy i uciąłem odwołania do innych klas/wyciąłem kod z try/catch
), na który natrafiłem w jednym z projektów. Podobno nie było czasu i trzeba było się spieszyć z pisaniem…
public class Test { // logging etc. private string _ala; private string Jolka private string mariolka; public string Ala { get { return _ala; } set { this._ala = value } } public string jolka() { return Jolka; } public object _some_advanceCode() { try { return this.Tektura(); } catch(Exception ex) { _log.Error(ex, "message"); } } private object Tektura() { try { return null; } catch(Exception ex) { throw; } } }
Tego się nie da czytać, to jest wyjątek na wyjątku. Nic tutaj nie jest zachowane… nic a nic. Do tego to jest jedyny kod który nie jest zgodny ze stylem z całą resztą. To bije w oczy, to powoduje, że czytając nie zastanawiam się nad kodem ale o co mu chodziło nazywając tą zmienną tak a tą tak? Czemu to jest metoda nie własność? On to gdzieś wykorzystuje dalej? No sami powiedzcie, co o tym kodzie sądzicie? Czytelny? Czy da się usnąć pewne zbędne konstrukcje?
Nawet pod presją czasu, utrzymajmy styl, unifikujmy kod, to nas nic nie kosztuje a możemy na tym dużo, bardzo dużo zyskać.
Trafiłeś w punkt. Bardzo mnie drażni takie rozdwojenie jaźni w projekcie. Nie lubię takiego mieszania w kodzie. W szczególności wstawiania using ponad deklaracją namespace jak i pod w jednym pliku… Brrr… Jednolity styl to podstawa :)
Odkąd wdrozylismy w firmie StyleCop problem przestaje istnieć. Polecam. Definicje można wrzucić jako paczkę nuget i wdrażać w każdy projekt identyczne.
Dzięki, StyleCop znamy i nie chcemy w zespole wykorzystywać. Z reszta moje nastawienie do tego typu narzędzi jest jaki jest i tego raczej też nic nie zmieni :) Tak czy siak, jest to jakieś rozwiązanie problemu o którym warto wiedzieć! :)
Temat dzisiejszego wpisu jest wałkowany w każdej “biblii programisty” typu Clean Code czy Code Complete i powinno się wręcz zmuszać ludzi, by przeczytali jedną z tych pozycji przed rozpoczęciem kodowania jako członek zespołu. Na szczęście tego typu niespójności są bardzo łatwe do wyeliminowania za pomocą współczesnych IDE – kiedyś było to dużo trudniejsze.
@Paweł Szczygielski
Jest i dalej ludzie tego nie robią. Pół biedy, mogę się założyć, że 60/70% ludzi którzy te książki przeczytały i tak robią to co tutaj opisałem. Dlatego też warto o tym pisać i przypominać.
Comments are closed.