Wpis z mikrobloga

Mam pytanie odnośnie komentarzy, jakie macie do nich podejście? Ja przez cały czas byłem uczony i tam gdzie pracowałem było mówione, że nie powinno ich być, a jak są to znaczy że kod jest źle napisany. Staram się postępować z zasadami clean codu wujka Boba. W miejscu gdzie teraz jestem wszyscy narzucają na mnie pisanie komentarzy nawet jeżeli jest to przetłumaczenie metody z angielskiego na polski O.o

Mój przykładowy kod, za którego brak komentarzy mają do mnie pretensje: http://pastebin.com/JCQfZNRq
Co sądzicie o nim? Przy okazji jak zobaczycie tam jakąś głupotę to dzięki za info ;)
#programowanie #java
  • 32
@Gwozdziuuu: komentarze są przydatne kiedy nad kodem pracuje kilka osób albo robisz go dla kogoś. Po komentarzu może się łatwo odnaleźć co funkcja robi, gdzie przenosi itd. Nie trzeba się wczytywać a czasami jedna linijka komentarzu może wytłumaczyć 200 linijek funkcji...
@Gwozdziuuu: samodokumentujący się kod > bezsensowne komentarze.

Co do tego, co wkleiłeś: sent, nie sended ( ͡° ͜ʖ ͡°) Łapanie "Exception" to zwykle zła praktyka, ale nie wiem jak się u Was to rozwiązuje. Metoda "isIdReapeted" to coś a la kod z memów CS Graduate, IMO lepiej tak:

private boolean isIdReapeted(int idWithNoResponse) {
for (int idAlreadySended: displayIdsAlreadySended) {
if (idWithNoResponse == idAlreadySended) {
return false;
}
}
@kisi3l: Dlaczego uważasz, że brak komentarzy to tu najmniejszy problem? Niestety, ale w chwili obecnej tu gdzie pracuję nikt nie robi mi rewizji kodu co strasznie mnie boli bo czuję, że w ten sposób daleko na zajadę.
@Gwozdziuuu: Ponieważ ten kod jest napisany bardzo źle. Począwszy od konwencji nazewniczej, przez formatowanie, brak spójności, używanie przestarzałych konstrukcji, wynajdowanie koła na nowo, exception handling, na skopanej logice (isIdRepeated) kończąc.
@Gwozdziuuu: W ogóle ta cała metoda private boolean isIdReapeted(int idWithNoResponse) jest do grubej refaktoryzacji - nazwa sugeruje coś innego niż się dzieje w środku, toSend wygląda na pojęcie w ogóle z innego kontekstu... gdyby tam dodać komentarz to obawiam się, że metoda zyskała by jeszcze jedno znaczenie, zupełnie niż wynikające z nazwy metody, jej ciała, bądź kontekstu jej rzeczywistego użycia. Ps. Tu trochę ortodoksyjnie. W erze podejścia funkcjonalnego chętnie wydzieliłbym displayIdsAlreadySended
@kisi3l: @ppawel: Trochę mnie zmartwiliście :/ Staram się skupiać nad jakością kodu, jednak brakuje osoby, która sprawdzałaby mój kod wyższa stażem. Testów nie ma, bo oczywiście nie ma na to czasu. Robimy to też dużo powiedziane bo sam pracuję nad czymś całkiem sporym, a mam tylko rok doświadczenia komercyjnego.
@Gwozdziuuu: poprzednie podejście jest dobre - dobry kod potrzebuje minimum komentarzy. Już największą głupotą jest komentowanie na zasadzie funkcja o nazwie: addAToB komentarz: dodaje A do B, a ludzie potrafią tak robić nawet wrzucając komentarz po angielsku. Oczywiście komentarze w wielu miejscach są pomocne, ale nie powinny robić tego co w czytelnym kodzie robią nazwy klas, metod, zmiennych.

za kod bez komentarzy powinno się iść do więzienia.


@npsr: do więzienia
@npsr: Niekoniecznie... Dobrze napisany kod nie potrzebuje dużo komentarzy . Tu jest po prostu wymagany do automatycznej dokumentacji. Cóż niektórzy chcą dużych dokumentacji (ba często drukowanych), najczęściej ich nawet nie przegladają, ale wymóg jest dostarczyć. Tu masz dzięki temu samo generującą się dokumentacje i do niej jest opis.
@HetmanPolnyKoronny: @Kaczus2B: a gdzie na napisałem, że musi być ich dużo? Po prostu muszą być i tyle. Najczęściej wystarczy info, że wpuszczamy stringa a otrzymujemy boolean czy coś takiego i tyle.

Ale komentarze nie tylko są potrzebne, żeby przyśpieszyć komuś innemu pracę (bo nawet jeśli kod jest dobry i czytelny, nie zawsze znaczy, że powinienem go w ogóle czytać), to również porządkują całość wizualnie.

A już nie wspomnę o przypadkach,
Najczęściej wystarczy info, że wpuszczamy stringa a otrzymujemy boolean czy coś takiego i tyle.


@npsr: większość cywilizowanych języków taką informację posiada już w nagłówku funkcji, fakt nie pomyślałem o tych mniej cywilizowanych ( ͡° ͜ʖ ͡°)