Czy piszesz tytuły w komentarzach do kodu? [Zamknięte]

17

Przeglądałem stary kod, który napisałem (pierwszy rok na uniwersytecie) i zauważyłem, że pisałem tytuły komentarzy poprzedzające różne części kodu. Rzeczy takie (pochodzi z gry Monopoly):

/*Board initialization*/
...code...

/*Player initialization*/
...code...

/*Game logic starts here*/
/*Displaying current situation*/
...code...

/*Executing move*/
...code...

/*Handle special event*/
...code...

/*Commit changes, switch to next player*/
...code...

Może to być zbędne i prawdopodobnie niepotrzebne, jeśli kod jest naprawdę bardzo przejrzysty, ale gdy skanowałem plik, zaskoczyło mnie, jak mocno czułem się, jakbym wiedział, co się dzieje, chociaż prawie nie patrzyłem na rzeczywisty kod. Zdecydowanie widzę to jako pasujące w pewnych okolicznościach, więc zastanawiam się - czy to robisz? Czy uważasz, że to dobry pomysł? A może to za dużo?

EpsilonVector
źródło

Odpowiedzi:

24

To zapach kodu. To mówi co, a nie dlaczego .

Jeśli jest to konieczne, podziel kod na małe funkcje.

Maniero
źródło
4
Nie ma sensu mieć funkcji, aby mieć funkcje.
Paul Nathan
30
ma rację: jeśli kod zasługuje na komentarz podobny /*Board initialization*/, prawdopodobnie powinien być w funkcji o nazwie InitializeBoard. Jeśli struktura kodu jest wystarczająco przejrzysta, nie będziesz potrzebować komentarzy.
Tim Robinson
3
„Co” warto wiedzieć i często nie jest oczywiste, patrząc na kod. Te komentarze wyjaśniają ogólną intencję.
DarenW,
4
@DarenW - ale także funkcje / procedury / metody. Później mają dodatkową zaletę modułowości kodu, co ułatwia jego zrozumienie .
Stephen C,
3
Inną zaletą tego jest to, że funkcje takie jak InitializeBoardlub InitializePlayerpojawią się na listach przeglądarek funkcji / modułów / klas większości IDE, podczas gdy komentarze nie. Łatwiejsza nawigacja.
Steve Fallows,
13

Robię to cały czas. Zarówno do zaznaczenia, co robi kod, jak i, co ważniejsze, jak powiedziałeś, aby ułatwić skanowanie i znalezienie fragmentu kodu. Czasami również zapiszę zaangażowany proces w komentarzach i „wypełniam” kod pod komentarzami, gdy idę.

Grandmaster B.
źródło
7
+1 - przejrzystość to dobra rzecz. Nie zgadzam się z zatwierdzoną odpowiedzią, mówiąc, że jest to zapach kodu. Jeśli dodaje jasności - zrób to.
szybko_now
2
Jeśli narusza OAOO, nie rób tego. Jest redundantny i zwykle nie synchronizuje się z kodem, który dokumentuje. Umieść kod w funkcji i nazwij funkcję tym, co robi. Nowoczesne IDE ułatwiają zmianę nazwy funkcji i aktualizację wszystkich odniesień. W ten sposób wszystkie instancje są aktualne.
Scott Whitlock,
3
+1 ode mnie W dużych plikach kodu lubię mieć więcej niż tylko białe znaki oddzielające sekcje logiczne. Tak, myślę, że jeśli twoja funkcja jest zbyt długa, musisz ją podzielić, ale uważam, że dużo łatwiej jest ją odczytać, jeśli części są oddzielone komentarzami.
Anthony
6

Interesujące jest dla mnie to, ilu ludzi nie lubi tej praktyki, ale tak naprawdę nie jestem w stanie wyjaśnić, dlaczego. Powodem, dla którego takie komentarze są niezadowolone, jest to, że naruszyłeś zasadę pojedynczej odpowiedzialności. Ta konkretna nazwa jest zwykle używana tylko w kontekście OO, ale ogólna koncepcja jest również nazywana spójnością i ma zastosowanie do innych paradygmatów. Szkoły zazwyczaj nie uczą tego rodzaju zasad projektowania do końca programu studiów, jeśli w ogóle. W rzeczywistości niektórzy nauczyciele nakazują jej naruszenie, aby ułatwić ocenę, wrzucając wszystko do jednego pliku. Dlatego twoja ignorancja na pierwszym roku jest usprawiedliwiona, a fakt, że zauważyłeś „coś” źle i starałeś się wyjaśnić za pomocą komentarzy, jest nawet chwalebny w danych okolicznościach, ale ogólnie lepiej jest naprawić niejasny projekt niż próbować opisać to komentarzem.

Karl Bielefeldt
źródło
4

Patrzę na te rzeczy jako sposób na uczynienie kodu bardziej przejrzystym czy nie. Jeśli można powiedzieć na podstawie tych metod w pliku co każda część jest wówczas nie ma potrzeby, jednak jeśli mają mieć kilka odcinków to może być użyteczne. Być może, gdy plik kodu staje się zbyt duży, należy go rozbić, co może zmniejszyć potrzebę takich komentarzy.

Powiedziałbym, że jeśli pracujemy w zespole nad opracowaniem standardu, abyście wszyscy przynajmniej kodowali i komentowali w ten sam sposób, dzięki czemu patrzenie na kod staje się łatwiejsze.

aqwert
źródło
3

Robię to, ponieważ często komunikuję sobie zamiar lub zasadniczo zakładam wygodną zakładkę do rzeczy takich jak „Czyszczenie danych zaczyna się tutaj”. Zazwyczaj pod tym tytułem znajduje się krótkie przypomnienie logiki tego, co robię i dlaczego.

Lubię redundancję. Jeśli z jakiegoś powodu zgubię notatnik laboratoryjny lub będę musiał ponownie przeczytać kod, który napisałem lata temu, nie lubię dzielić tego, co robiłem i dlaczego. Jeśli przynajmniej część tej logiki znajduje się w kodzie, jest ona wystarczająco udokumentowana, abym mógł przynajmniej z nią ponownie pracować.

Myślę, że część moich skłonności do tego jest spora część mojego programowania ma charakter statystyczny, a zatem nieco powtarzalny. Podczas gdy może istnieć kilka fragmentów kodu, w których mam pomocnie nazwaną funkcję do wyszukiwania, mogę mieć kilkadziesiąt dość podobnych zastosowań czegoś takiego jak ogólna funkcja modelu liniowego. Przydaje się możliwość znalezienia, który z nich był „jak wrażliwy jest wynik na kod Choice A vs. Choice B lub C”, a który był czymś innym. Często przyspieszają to tytuły.

Fomite
źródło
Komentarze wskazujące cel biznesowy / cel wysokiego poziomu są bardzo cenne. Umożliwiają potwierdzenie i wsparcie zrozumienia. Testy jednostkowe również można uznać za zbędne - sugerowałbym, że dokumentowanie i rozumienie kodu jest co najmniej tak samo ważne jak testowanie.
Thomas W
2

Myślę, że jest to przydatne w sytuacjach, w których masz gigantyczne pliki źródłowe z dziesiątkami funkcji i możesz luźno uporządkować je w takie fragmenty. Nie twierdzę jednak, że podoba mi się to lepiej niż mniejsze, bardziej ukierunkowane pliki źródłowe ...

µBio
źródło